Mail.appで選択中のフォルダ(メールボックス)以下に存在する全メールに添付されているファイルのうち、指定形式のファイルのみ指定フォルダに保存するAppleScriptです。
・Mail.appで選択中のフォルダを求め、フォルダの(Mail.app上の)フルパス文字列を再帰処理で取得
・書き出し先フォルダを指定(choose folder)
・指定のMail.app上の選択中のフォルダ以下の全メールフォルダ、およびそれらの中に入っているメールを再帰処理で取得
・取得した全メールをループで調査し、添付ファイルが存在するかチェック
・1メールあたりの添付ファイルはリストで返ってくるので、すべて求めてループで処理
・添付ファイルの拡張子を求め、書き出し許可リスト {“txt”, “gv”, “dot”} に入っていれば、指定フォルダ内に保存
▲書き出したファイル
たまーに、添付ファイルがよく出回っているメーリングリスト(QuartzComposer MLとかGraphViz MLとか)で、メール添付されているファイルを一括で取得するために作成しました。
AppleScript名:Mail.appで選択中のフォルダ以下に存在する全メールの指定形式の添付ファイルを指定フォルダにコピー v2 |
use AppleScript version "2.4" use scripting additions use framework "Foundation" script spd property fullSubPath : {} property tmpMesList : {} end script property aFullPath : "" property tmpFullPath : "" set targList to {"txt", "gv", "dot"} –書き出し対象拡張子 –変数の初期化 set tmpFullPath to "" set aFullPath to "" set (fullSubPath of spd) to {} set (tmpMesList of spd) to {} –選択中のメールボックス(フォルダ)のフルパスを文字列で取得(dir1/dir2/dir3) set targMBObj to getSelectedOneMailBox() of me extraxctTextFullPathOfMBObject(targMBObj) of me copy aFullPath to targMB if targMB = "" then display notification "Mail.app上で選択中のメールボックス(フォルダ)はありません。" return end if tell current application set targFol to choose folder with prompt "添付ファイルの書き出し先フォルダを指定してください" end tell –指定メールボックス(フォルダ)以下のすべてのメールボックス(フォルダ)を取得する tell application "Mail" tell mailbox targMB set aList to name of every mailbox end tell end tell –指定フォルダ以下のMailboxをサブフォルダまで再帰ですべて取得する repeat with i in aList set j to contents of i set tmpPath to targMB & "/" & j set the end of (fullSubPath of spd) to tmpPath getEverySubMailbox(tmpPath) of me end repeat –全サブフォルダから指定文字列をSubjectに含むものをすべて取得する repeat with i in (fullSubPath of spd) set tmpBox to contents of i tell application "Mail" tell mailbox tmpBox set mesList to (every message) end tell –指定フォルダ中のMailでループ repeat with ii in mesList set jj to contents of ii set attS to mail attachment of jj if attS is not equal to {} then –Mailの添付ファイルを順次指定フォルダに保存する repeat with iii in attS set jjj to contents of iii set aName to name of jjj set aExt to getPathExtension(aName) of me if aExt is in targList then set savePath to (targFol as string) & aName –指定パスに添付ファイルを保存 save jjj in file savePath end if end repeat end if end repeat end tell end repeat –指定のメールボックス(フォルダ)以下にあるすべてのサブフォルダを(propertyに)追記して返す on getEverySubMailbox(aPath) tell application "Mail" tell mailbox aPath set aaList to name of every mailbox if aaList is not equal to {} then repeat with i in aaList set j to contents of i set tmpFullPath to aPath & "/" & j copy tmpFullPath to newPath set the end of (fullSubPath of spd) to newPath getEverySubMailbox(newPath) of me end repeat end if end tell end tell end getEverySubMailbox –Message Viewerで現在表示中のメールボックスの情報を1つのみ返す on getSelectedOneMailBox() tell application "Mail" tell message viewer 1 set mbList to selected mailboxes end tell end tell if length of mbList is equal to 0 then return "" end if set aMailBox to contents of (item 1 of mbList) return aMailBox end getSelectedOneMailBox –Mail.appのメールボックスオブジェクトを渡すと、テキストのフルパスに変換 on extraxctTextFullPathOfMBObject(aPath) tell application "Mail" try set parentPath to container of aPath on error return end try set meName to name of aPath if aFullPath = "" then –1回目のみスラッシュを入れないで処理 set aFullPath to meName else –通常処理はこちら set aFullPath to meName & "/" & aFullPath end if extraxctTextFullPathOfMBObject(parentPath) of me –再帰呼び出し end tell end extraxctTextFullPathOfMBObject –ファイル名から拡張子を取得する on getPathExtension(aStr as string) set pathString to current application’s NSString’s stringWithString:aStr return (pathString’s pathExtension()) as string end getPathExtension |
More from my site
(Visited 86 times, 1 visits today)