私はAppleScriptを初めて使用し、Mail.appメッセージを.emlメッセージとして保存する方法を理解しようとしています。理想的には、メッセージと添付ファイルを一緒に保存するメールメニューバーのアクションと同じように動作させたいと思います。
ワークフローは、メールで選択を行い、ホットキーを押すと、関数が保存する電子メールのファイル名(newFile
)を作成します。メッセージをパス(theFolder
)に.eml形式で保存する方法についてサポートが必要です。
tell application "Mail"
set msgs to selection
if length of msgs is not 0 then
display dialog "Export selected message(s)?"
if the button returned of the result is "OK" then
set theFolder to choose folder with Prompt "Save Exported Messages to..." without invisibles
repeat with msg in msgs
-- determine date received of msg and put into YYYYMMDD format
set msgDate to date received of msg
-- parse date SEMversion below using proc pad2()
set {year:y, month:m, day:d, hours:h, minutes:min} to (msgDate)
set msgDate to ("" & y & my pad2(m as integer) & my pad2(d))
-- assign subject of msg
set msgSubject to (subject of msg)
-- create filename.eml to be use as title saved
set newFile to (msgDate & "_" & msgSubject & ".eml") as Unicode text
-- copy mail message to the folder and prepend date-time to file name
-- THIS IS WEHRE I AM COMPLETE LOST HOW SAVE THE EMAIL into theFolder
end repeat
beep 2
display dialog "Done exporting " & length of msgs & " messages."
end if -- OK to export msgs
end if -- msgs > 0
end tell
on pad2(n)
return text -2 thru -1 of ("00" & n)
end pad2
Mailフォルダから.emlxファイルをコピーできます。
tell application "Mail"
set msgs to selection
if length of msgs is not 0 then
display dialog "Export selected message(s)?"
if the button returned of the result is "OK" then
set theFolder to POSIX path of (choose folder with Prompt "Save Exported Messages to..." without invisibles)
repeat with msg in msgs
-- determine date received of msg and put into YYYYMMDD format
set msgDate to date received of msg
-- parse date SEMversion below using proc pad2()
set {year:y, month:m, day:d, hours:h, minutes:min} to (msgDate)
set msgDate to ("" & y & my pad2(m as integer) & my pad2(d))
-- assign subject of msg
set msgSubject to (subject of msg)
-- create filename.eml to be use as title saved
set newFile to (msgDate & "_" & msgSubject & ".eml") as text
set newFilePath to theFolder & newFile as text
set newFilePath2 to theFolder & newFile & "x" as text
-- copy mail message to the folder and prepend date-time to file name
set messageId to id of msg
set myFolder to POSIX path of (account directory of account of mailbox of msg as text)
do Shell script "find " & quoted form of myFolder & " \\( -name \"" & messageId & ".eml\" -a -exec cp -a {} " & quoted form of newFilePath & " \\; \\) -o \\( -name \"" & messageId & ".emlx\" -a -exec cp -a {} " & quoted form of newFilePath2 & " \\; \\)"
end repeat
beep 2
display dialog "Done exporting " & length of msgs & " messages."
end if -- OK to export msgs
end if -- msgs > 0
end tell
on pad2(n)
return text -2 thru -1 of ("00" & n)
end pad2
メッセージの生のソースを新しいファイルにエクスポートするだけです。
tell application "Mail"
set msgs to selection
if length of msgs is not 0 then
set theFolder to (system attribute "HOME") & "/Downloads/"
repeat with msg in msgs
set msgContent to source of msg
-- determine date received of msg and put into YYYY-MM-DD format
set msgDate to date received of msg
-- parse date SEMversion below using proc pad2()
set {year:y, month:m, day:d, hours:h, minutes:min} to (msgDate)
set msgDate to ("" & y & "-" & my pad2(m as integer) & "-" & my pad2(d))
-- assign subject of msg
set msgSubject to (subject of msg)
-- create filename.eml to be use as title saved
set newFile to (msgDate & " " & msgSubject & ".eml") as rich text
set newFilePath to theFolder & newFile as rich text
set referenceNumber to open for access newFilePath with write permission
try
write msgContent to referenceNumber
delete msg
on error
close access referenceNumber
end try
close access referenceNumber
end repeat
end if -- msgs > 0
end tell
on pad2(n)
return text -2 thru -1 of ("00" & n)
end pad2