選択したメールメッセージをソース URL とともに Evernote に送信する

選択したメールメッセージをソース URL とともに Evernote に送信する
選択したメールメッセージをソース URL とともに Evernote に送信する

新しいEvernote for Macベータ版を試していたところ、選択したメールメッセージをEvernoteに素早く送信する方法を探していました。AppleScriptでできることは知っていましたが、Googleで検索しても私のニーズにぴったりの解決策は見つかりませんでした。幸いなことに、このスクリプトとJohn Gruber氏の以前のヒントを組み合わせることで、まさに私が求めていた機能を実現するシンプルなAppleScriptを組み立てることができました。

私のAppleScriptは、Efficient ComputingによるこのAppleScriptを超高速に改変したものです。オリジナルのAppleScriptでは、選択したメールメッセージを基に、Evernoteに以下の内容を含むリッチテキストノートを作成します。

  • メッセージの件名をタイトルとして
  • 「送信元」、「件名」、「日付」、「宛先」の短いヘッダー
  • 実際のメモとしてのメッセージの内容(リッチテキスト形式)

EvernoteとMail.app間の軽量な通信を確保するため、message://ノートにURLを追加したいと考えました。あまり文書化されていないのmessage://ですが、Mailは個々のメッセージを参照するために、いわゆる「メッセージID」と組み合わせてURLスキームを使用しています。つまり、OS Xでは、このURLをクリックするか、Safariなどから手動でURLを開くことで、メッセージに直接アクセスできます(新しいMail.appウィンドウで開きます)。

オプションを調査しているときに、URL の可能なスキームを説明する John Gruber による 2007 年の投稿を見つけましたmessage://

上記で挙げた最初のURL形式(message:%3cMESSAGE-ID%3e(スラッシュなし))は、メールからメッセージをドラッグしたときにメールが生成する形式です。しかし、2番目の形式(message://%3cMESSAGE-ID%3e(スラッシュあり))の方が優れていることがわかりました。その理由は、NSTextViewを使用するCocoaアプリのテキストフィールドにURL自体を貼り付けると、URL内の任意の場所をControlキーを押しながらクリックし、コンテキストメニュー上部の「URLを開く」コマンドと「リンクを作成」コマンドを使用できるからです。CocoaはテキストをURLとして認識するからです。

Cocoaアプリでは、Mountain Lionでもこれは変わりません。「」<>「」文字をパーセントエンコードすることで、TextEditやSafariなどのアプリでは、URLの任意の部分をControlキーを押しながらクリックすると「URLを開く」オプションが表示されます。

しかし、Gruber氏の提案するスキームはEvernoteにもメリットがあることがわかりました。Evernoteには優れたAppleScript辞書があり、その定義の中に「source URL」プロパティがあり、特定のノートのソースリンクを定義できます。これは通常、Webページから切り取ったノートに使用されます。

新しい Evernote 5 では、ソース URL は「サイトを表示」ボタンのある「URL」フィールドのポップオーバーから利用できます。また、ノートのエディターの上にルート ドメインとして表示されます。

私のテストでは、Evernote のソース URL パラメータにはパーセントエンコードされたmessage://URL の方が適していることがわかりました。実際、この URL 形式は、ノートエディタ上部の Evernote のソースフィールドでクリック可能になります。これは、ノートの詳細ポップオーバーを開かずにメールアプリで元のメッセージを開きたい場合に非常に便利です。そこで、message://John Gruber 氏の提案する方法で を生成し、それを新規ノートのソース URL として使用するように、元の AppleScript を修正しました。

-- Slightly modified version of Efficient Computing's AppleScript: http://efficientcomputing.commons.gc.cuny.edu/2012/03/17/copy-email-message-in-mail-app-to-evernote-applescript/

tell application "Mail"
 --get selected messages
 set theSelection to selection
  --loop through all selected messages
 repeat with theMessage in theSelection
  --get information from message
 set theMessageDate to the date received of theMessage
 set theMessageSender to sender of theMessage
 set theMessageSubject to the subject of the theMessage
 set theMessageContent to the content of theMessage
 set theMessageURL to "message://%3c" & theMessage's message id & "%3e"
  --make a short header
 set theHeader to the all headers of theMessage
 set theShortHeader to (paragraph 1 of theHeader & return & paragraph 2 of theHeader & return & paragraph 3 of theHeader & return & paragraph 4 of theHeader & return & return)
  --import message to Evernote
 tell application "Evernote"
 synchronize
 set theNewNote to (create note with text (theMessageURL & return & return & theShortHeader & theMessageContent))
 set the title of theNewNote to theMessageSubject
 set the source URL of theNewNote to theMessageURL
 set the creation date of theNewNote to theMessageDate
 synchronize
 end tell
  end repeat

end tell

ご覧の通り、message://ノートの1行目にURLを繰り返し記載しています。これには2つの理由があります。1つ目は、EvernoteがソースURLパラメータを廃止した場合でも、メインノートにバックアップ文字列があるので、メッセージへのリンクが失われる心配がありません。2つ目の理由は、iOS版Evernoteアプリに関係しています。iOSmessage://ではURLは使えませんが、期待はできます。将来的には、iOS版Evernoteでインラインリンクをタップするだけで、追加メニューを表示せずに済むようになると分かっている方が安心です。

AppleScriptには当然ながら限界があります。背景やその他のグラフィカルなレイアウトを含むリッチHTML画像の場合、メッセージのテキストコンテンツしか取得できません。さらに、設計上の問題として、スクリプトはメッセージに含まれる引用レベルごとにメッセージコンテンツも取得してしまいます。個人的には、これは良い点だと思います(常にメモで会話全体を確認できます)。しかし、メッセージコンテンツを何らかの方法で制御できればもっと良いでしょう。

AppleScriptを使用するには、Alfred、Keyboard Maestro、FastScriptsなどのアプリを使ってキーボードショートカットを割り当てます。または、メールアプリを最前面に表示しているときに、OS XのスクリプトメニューからAppleScriptを呼び出すこともできます。

ご提案がありましたら、お気軽に Twitter または App.net でご連絡ください。

クラブ・マックストーリーズ

追加コンテンツと特典にアクセスする

Club MacStories は 2015 年に設立され、ほぼ 10 年間にわたって毎週独占コンテンツを提供してきました。

毎週、毎月の電子メール ニュースレターから始まったものが、すべての MacStories ファン向けに設計されたメンバーシップ ファミリーに成長しました。

詳細については、こちらおよびクラブの FAQ をご覧ください。

Club MacStories : アプリ、ヒント、自動化ワークフロー、長​​文執筆、MacStories Unwind ポッドキャストへの早期アクセス、定期的な景品など、盛りだくさんの情報を満載した、電子メールと Web 経由の週刊および月刊ニュースレター。

Club MacStories+ : Club MacStories が提供するすべての機能に加え、アクティブな Discord コミュニティ、クラブの過去のカタログ全体を閲覧するための高度な検索機能とカスタム RSS 機能、ボーナス コラム、多数のアプリ割引などが含まれます。

Club Premier : 上記のすべてに加え、早期に、広告なしで、高ビットレートのオーディオで配信される当社の主力ポッドキャストの拡張バージョンである AppStories+ が含まれます。