在 AppleScript 中为 .eml 文件创建“另存为”功能

uni*_*ter 6 automation applescript apple-mail macos

我是 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
Run Code Online (Sandbox Code Playgroud)

ada*_*one 2

您可以从邮件文件夹复制 .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
Run Code Online (Sandbox Code Playgroud)