NaganoyaMail.appで未読メールを取得するAppleScriptです。「未読メール」とは何かという話があります。未読メールとは、「まだ読んでいないメール」のことです。すべてのメッセージに未読/既読のフラグが用意されています。極論すれば、すべてのメッセージの未読/既読状態を調べる必要があるわけですが、さすがにそれだと実用性がいまひとつなので、メールフォルダごとに未読メッセージのカウントが求められるようになっています。一般的に「未読メール」といった場合、サブフォルダに仕分けしたメールの未読件数ではなく、受信メールボックス(INBOX)に入っている未読メールをカウントすることになることでしょう。Mail.appには複数のメールアカウントを登録できるようになっているため、受信メールボックスのうちそれぞれのアカウントに該当するものが別々に返ってくることになります。Apple純正のアプリケーションの多くはAppleScriptのオブジェクト名までローカライズされている(過剰ローカライズ)ことが多いのですが、Mail.appについては受信ボックス(=受信トレイ)は「INBOX」となっており、その他のボックスについても(ゴミ箱とか)ローカライズされていません。NaganoyaMail.app上で選択中のメッセージ(Mail)に添付ファイルがあれば名称リストで背景色を赤く塗るAppleScriptです。10.9あたりからでしょうか、Mail.appでGmailのアカウントのメールを取得するのに時間がかかったり、障害が発生するようになり、「とてもGmailを使っていられない」と感じました。その結果、Gmailにこだわる必要もなかったので、Gmailアカウントは使わないようにしていました。macOS+Gmailだとトラブルの予感しかしません。久しぶりにGmailのアカウントを使う必要があり、仕方なく使っていたのですが.........やっぱりトラブルに遭遇。気づいたときには久しぶりに震えましたが、再発防止のためには何かプログラム的なチェックを行う必要があります。そこで、冒頭で説明したように「Mail.app上で選択中のメールに添付ファイルが存在しているものは、背景色を赤くする」というAppleScriptを作成した次第です。▲Mail.appのメッセージ一覧(Classicレイアウト)で、本Scriptを用いて添付ファイルチェックを行なったところ。添付メッセージを検出して濃い赤で塗られているメッセージでも、Mail.appの添付ファイルインジケータに添付ファイルがあるように表示されない。Gmailアカウント以外でこのような症状に遭遇した経験はありませんとりあえず、「選択中のメッセージ」を処理するように書いてテストしましたが、Mail.appのメール受信時に実行するメールアクションで実行することが理想です。10.14上ではまともになっていることを祈るばかりです。10.13のような壊れ環境でも実行できるようにこのような(メールアクションではない形式の)Scriptで書いてみたという次第です。NaganoyaMail.appで選択中のフォルダ(メールボックス)以下に存在する全メールの添付ファイルの拡張子のバリエーションを集計するAppleScriptです。階層フォルダで管理しているメールボックス(フォルダ)のうち、選択しているメールフォルダ以下のすべてのメッセージに添付されているファイルの拡張子を取得して結果を表示します。何のために作ったとかいうことはなくて、ただ単に調査のために作ったものです。処理するメールの数にもよりますが、CPU負荷も大きく、時間もそれなりに(数分ぐらい?)かかります。"Mail.app上で選択中のメールボックス(フォルダ)はありません。NaganoyaMail.appで選択中のフォルダ(メールボックス)以下に存在する全メールに添付されているファイルのうち、指定形式のファイルのみ指定フォルダに保存するAppleScriptです。MLとか)で、メール添付されているファイルを一括で取得するために作成しました。"Mail.app上で選択中のメールボックス(フォルダ)はありません。NaganoyaMail.app上で選択中のメールボックス(フォルダ)のパスをフルパスの文字列で求めるAppleScriptです。Mail.app上ではメールボックス(フォルダ)を複数階層作成できます。ファイルシステム上のフォルダではないので、ファイル処理でメールのメールボックス(フォルダ)間の移動を行うことはできませんが、パスを指定してmoveコマンドでメールを移動させられます。Mail.app上のパスは、level1/level2のように記述します。REALbasic"と返ってきます。ように指定すれば、指定フォルダ以下のメール(message)が返ってきます(サブフォルダ内のメールは対象外)。ofでパスをクォート処理しておく必要はありません。フルパスを求めるのに、再帰処理を行なっています。するだけで送信は行いません。普通にMail.appをコントロールすればメールの送信は行えるので、単にNSSharingServiceのテストです。IDを取得するAppleScriptです。1メールあたり0.03秒ぐらいで取得します。ヘッダーのテキストを行単位でparseしてサーチしても全然いいのですが、メール関連は割と込み入った仕様がてんこ盛りなので、AppleScriptでもMailCore2をよく活用しています。MailCore2がないとできない処理が多すぎて、これが使えないとけっこう泣きが入ります。API経由でメールの送信を行うAppleScriptです。試用にあたっては、SendGridにサインアップして試用アカウントを取得してください。この試用アカウントで実運用を行わないことがアカウト取得の前提条件となっています(かなり念押しされました、、、)。アクセストークンを取得したら、本リスト内のretAccessTokenハンドラ内にペーストしてください。本リストを掲載状態のままAccessTokenが伏字の状態で実行しても、メール送信は行えません。気になるメールの転送速度ですが、本AppleScriptではだいたい1通あたり0.1秒程度です。Mail.app経由で一般的なプロバイダのメールサーバーを経由して送るよりは10倍程度高速ですが、APIの呼び方をチューニングすることで、さらにこの10倍ぐらいの高速送信は行えるようになります。NaganoyaMail.appで送信元の氏名および送信先の氏名を明示的に指定しつつメール送信を行うAppleScriptです。Mail.appの操作Scriptはやればやるだけ課題が見えてくるので、ほどほどのところで止めています。メールアカウントについて、1つしかアカウントを登録していなければデフォルトのメールアカウントでを前提にメール送信すればいいはずですが、複数のアカウントを登録しているケースが多いので、アカウントを指定する処理を書いてみました。メールの大量連続送信については、1990年代からずっとAppleScriptで行なっていますが、途中で知り合いが盛大にやらかした(短時間で大量のメール送信を行なってさまざまなプロバイダのメールサーバーをコケさせかけた)影響もあって、日本国内のネットワークでは単位時間内に所定の本数を超えるメール送信を行うと、プロバイダからすぐにメール送信のリレーを止められ、その後しばらくメール送信を行えなくなるのが「お約束」となっています。だいたい、1秒に1通以上(1分に60通以上)送信すると疑われます。API経由でSendGridのサービスを呼び出してメーラー以外でメール送信を行うあたりが落とし所になっています。NaganoyaMail.appで選択中のメール本文のSHA3チェックサムを計算するAppleScriptです。10.13.xのバージョン中に状況が好転するような気配がまったくしないこのOS。2018年6月のWWDCで次の10.14を発表して「アップデート間隔を伸ばす」と言ったところで、同じCEO、同じスタッフ、同じ開発期間でまた2018年10月にリリースするとかいったら「同じことの繰り返し」になるのではないかと戦々恐々としています。10.13のMail.appでメールの文字化けなどが報告されているため、実際に同じ文面のメールのチェックサムを10.12と10.13で比較するためにこのAppleScriptを書いてみました。結果は、とくに文字化けもなく同じチェックサム値が得られたものの、OSごと勝手にクラッシュしてシャットダウンするとか、Mail.appのルールが着信したてのメールに効かない時があるとか、Finderが不安定だとか、日本語入力時に辞書の用例が表示されると選択した候補で変換候補を確定できないとか、日本語入力時に確定後も変換ウィンドウが消えないとか、いまだにけっこうムチャクチャなOSです。