Mail.appで選択中のフォルダ(メールボックス)以下に存在する全メールの添付ファイルの拡張子のバリエーションを集計するAppleScriptです。
階層フォルダで管理しているメールボックス(フォルダ)のうち、選択しているメールフォルダ以下のすべてのメッセージに添付されているファイルの拡張子を取得して結果を表示します。
何のために作ったとかいうことはなくて、ただ単に調査のために作ったものです。処理するメールの数にもよりますが、CPU負荷も大きく、時間もそれなりに(数分ぐらい?)かかります。
AppleScript名:Mail.appで選択中のフォルダ以下に存在する全メールの添付ファイルの拡張子のバリエーションを集計 |
— – Created by: Takaaki Naganoya – Created on: 2018/11/25 — – Copyright © 2018 Piyomaru Software, All Rights Reserved — use AppleScript version "2.4" use scripting additions use framework "Foundation" script spd property fullSubPath : {} property tmpMesList : {} property outList : {} end script property aFullPath : "" property tmpFullPath : "" property extList : {} –変数の初期化 set tmpFullPath to "" set aFullPath to "" set extList to {} set (fullSubPath of spd) to {} set (tmpMesList of spd) to {} set (outList 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上で選択中のメールボックス(フォルダ)はありません。" –"No Mail.app folder selection" in Japanese return end if –指定メールボックス(フォルダ)以下のすべてのメールボックス(フォルダ)を取得する 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 –全サブフォルダからメールを取得し、添付ファイルの確認を行なって、添付ファイルの拡張子を取得して集計 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 try set attS to mail attachment of jj on error set attS to {} end try if attS is not equal to {} then –Mailの添付ファイルの拡張子を集計する try 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 not in extList) and (aExt is not equal to "") then set the end of extList to aExt end if end repeat end try end if end repeat end tell end repeat choose from list extList with prompt "選択中のメールフォルダ「" & targMB & "」中のメールに添付されているファイルの種別です" with title "添付ファイルの拡張子一覧" –指定のメールボックス(フォルダ)以下にあるすべてのサブフォルダを(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 85 times, 1 visits today)