Mail.appで選択しておいたメッセージに返信してsubjectと本文を加える

Mail.app上で選択しておいたメッセージの返信メッセージをreplyコマンドで作成し、その返信メッセージのサブジェクトと本文を変更するAppleScriptです。

USのAppleScript Users MLに投稿があった質問に答えておいたものです。どうも、Mail.appの動作が遅いらしくて……AppleScriptがMail.app側の動作を待ち切れず、返信メッセージを作成し終わる前に次のステップに進んでしまうため、delayコマンドなしではエラーが出てしまっていました。

GUI上でだいたい現象は観察できていたので、delayコマンド(最小限でいいので待機時間は0.1秒)を入れて動作を確認できました。3箇所に入れているdelayコマンドのうち、たぶん最初のものだけが必要不可欠なもので、あとの2つは「おまじない」に近いものです。ウチのCore i7 2.66GHzのMacBook Proではそのように感じられました。もっと高速で大量にCPU Coreが乗っているMac Proでは状況が違うかもしれません。

AppleScriptの処理系自体は、世間で言われるほど遅くないため……アプリケーションの状態を取得したり命令を発行したりすると、(AppleScript側が)けっこう待たされる感じです。そのため、アプリケーションとの通信頻度を下げることで大幅なスピードアップを図ったり、AppleScriptだけで処理をすることで速度を稼いだりするというテクニックが存在します。

やや、Mail.app側のバグのようにも見えますが、AppleScriptチームがMail.appチームを説得するには相当時間がかかりそうなので、Apple側が社内で対応する前に自衛手段を講じておくというのが、ベストな対策といったところでしょうか。

スクリプト名:Mail.appで選択しておいたメッセージに返信してsubjectと本文を加える
tell application “Mail”
  set msg to selection –Mail.appでメッセージを選択状態にしておく
  
set msg to first item of msg
  
  
set replied_msg to reply msg with opening window –選択しておいたメールの返信メッセージを作成
  
delay 0.1
  
  
–返信メッセージに対して操作を加える。
  
tell replied_msg
    set subject to “replied message”
    
delay 0.1
    
    
set content to “this is a replied message”
    
delay 0.1
    
  end tell
end tell

▼新規書類に ▼カーソル位置に ▼ドキュメント末尾に

Leave a Reply