Mail.app上で選択中のメッセージ(Mail)に添付ファイルがあれば名称リストで背景色を赤く塗るAppleScriptです。
なんでこんなもんが必要なのか?
macOS 10.9あたりからでしょうか、Mail.appでGmailのアカウントのメールを取得するのに時間がかかったり、障害が発生するようになり、「とてもGmailを使っていられない」と感じました。
その結果、Gmailにこだわる必要もなかったので、Gmailアカウントは使わないようにしていました。macOS+Gmailだとトラブルの予感しかしません。
久しぶりにGmailのアカウントを使う必要があり、仕方なく使っていたのですが………やっぱりトラブルに遭遇。
ファイルが添付されたメールでも、受信メッセージ一覧に添付ファイルの表示が一切出ません(macOS 10.12.6+Mail 10.3)。気づいたときには久しぶりに震えましたが、再発防止のためには何かプログラム的なチェックを行う必要があります。
そこで、冒頭で説明したように「Mail.app上で選択中のメールに添付ファイルが存在しているものは、背景色を赤くする」というAppleScriptを作成した次第です。
▲Mail.appのメッセージ一覧(Classicレイアウト)で、本Scriptを用いて添付ファイルチェックを行なったところ。添付メッセージを検出して濃い赤で塗られているメッセージでも、Mail.appの添付ファイルインジケータに添付ファイルがあるように表示されない。Gmailアカウント以外でこのような症状に遭遇した経験はありません
とりあえず、「選択中のメッセージ」を処理するように書いてテストしましたが、Mail.appのメール受信時に実行するメールアクションで実行することが理想です。
ただ、macOS 10.13上ではMail関連(とくにメールアクション)がまともに動いていないので、「見なかったこと」にして、macOS 10.14上ではまともになっていることを祈るばかりです。そういう、macOS 10.13のような壊れ環境でも実行できるようにこのような(メールアクションではない形式の)Scriptで書いてみたという次第です。
AppleScript名:選択中のメッセージに添付ファイルがあれば赤く塗る.scptd |
— – Created by: Takaaki Naganoya – Created on: 2019/03/26 — – Copyright © 2019 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" — Yosemite (10.10) or later use framework "Foundation" use scripting additions tell application "Mail" set aSel to selection if aSel = {} then return repeat with i in aSel set j to contents of i set attList to mail attachment of j set attNames to {} repeat with ii in attList set jj to contents of ii set aName to name of jj set the end of attNames to aName end repeat if attList is not equal to {} then set aLen to (length of attList) display notification "Attached " & (aLen as string) & retMultiple(aLen) of me & "….." & retStrFromArrayWithDelimiter(attNames, ", ") of me set background color of j to red end if end repeat end tell on retMultiple(aLen) if aLen = 0 then return " no item" else if aLen = 1 then return " item" else return " items" end if end retMultiple –リストを指定デリミタをはさんでテキスト化 on retStrFromArrayWithDelimiter(aList, aDelim) set anArray to current application’s NSArray’s arrayWithArray:aList set aRes to anArray’s componentsJoinedByString:aDelim return aRes as list of string or string end retStrFromArrayWithDelimiter |