简体   繁体   English

使用AppleScript通过邮件规则创建带有电子邮件详细信息的文本文件

[英]Using AppleScript to create text file with email details via Mail Rule

I am trying to create an AppleScript to use via a Mail rule to take data from the message, create a text file, and save it to a folder on the desktop. 我正在尝试创建一个AppleScript,以通过邮件规则使用以从消息中获取数据,创建一个文本文件,并将其保存到桌面上的文件夹中。 I have tried various iterations that do not give me an error but also don't create the file. 我尝试了各种迭代,这些迭代既不会给我错误,也不会创建文件。 I cut the "CREATE DOCUMENT WITH EMAIL INFORMATION" portion into a new AppleScript and set the variables above it as a test and the text file is created, so something isn't moving from my email information variable defining over to my text document creating. 我将“带有电子邮件信息的文档创建”部分切成新的AppleScript,并将其上方的变量设置为测试并创建了文本文件,因此从我定义的电子邮件信息变量到创建文本文档的过程并没有什么变化。 I have been teaching myself by reading these forums and am finally stuck, so any help with syntax or errors you see would be appreciated. 我一直在通过阅读这些论坛来自学,最终陷入困境,因此,如果您对语法或错误有任何帮助,将不胜感激。

using terms from application "Mail"
on perform mail action with messages this_message for rule this_rule
    tell application "Mail"

        --CLEAR THE VARIABLES
        set this_messageid to ""
        set this_date to ""
        set this_sender to ""
        set this_subject to ""
        set this_content to ""
        set this_attachments to ""

        -- GET THE MESSAGE ID OF MESSAGE
        set this_messageid to the messageid of this_message

        --GET THE DATE RECEIVED OF MESSAGE
        set this_date to the date received of this_message

        -- GET THE SENDER OF THIS MESSAGE
        set this_sender to the sender of this_message

        -- GET SUBJECT OF MESSAGE
        try
            set this_subject to (subject of this_message) as Unicode text
            if this_subject is "" then error
        on error
            set this_subject to "NO SUBJECT"
        end try

        -- GET CONTENT OF MESSAGE
        try
            set this_content to (every character of content of this_message) as Unicode text
            if this_content is in {"", "?"} then error
        on error error_message
            set this_content to "NO CONTENT"
        end try

        --DETERMINE IF THERE ARE ATTACHMENTS
        if thisMessage's mail attachments is not {} then
            set this_attachments to "Yes"
        end if

        --GET THE MAILBOX ACCOUNT OF MESSAGE
        set this_account to account of mailbox of thisMessage

    end tell



    -- CREATE DOCUMENT WITH EMAIL INFORMATION
    set this_document to open for access ("/Users/username/Desktop/SendToKeepIt/" & "Email " & this_subject & " " & this_messageid & ".txt") with write permission
    write "Airmail Link: " & "airmail://message?mail=" & this_account & "&messageid=" & this_messageid & return & "Mail Link: " & "message://" & "&messageid=" & this_messageid & return & return & "Date: " & this_date & return & "Subject: " & this_subject & return & "Sender: " & this_sender & return & "Attachments?: " & this_attachments & return & return & this_content to this_document
    close access this_document

end perform mail action with messages
end using terms from

Update 2018-08-14 Based on the comment below, I made some changes but am still getting the same result, no file is created. 更新2018-08-14根据以下评论,我进行了一些更改,但仍得到相同的结果,未创建文件。 Again, if I copy the script portion from "--CREATE..." to "close access" and put variables above the script, I get a file that is exactly what I want, so for some reason the variables I am setting from the mail message are not being used to create the document I assume? 同样,如果我将脚本部分从“ --CREATE ...”复制到“ close access”并将变量放在脚本上方,则会得到恰好是我想要的文件,因此由于某种原因,我要从中设置变量邮件消息没有用于创建我假设的文档?

using terms from application "Mail"
    on perform mail action with messages these_messages for rule this_rule
        tell application "Mail"
            set the message_count to the count of these_messages
            repeat with i from 1 to the message_count
                set this_message to item i of these_messages

                --CLEAR THE VARIABLES
                (*
                set this_messageid to ""
                set this_date to ""
                set this_sender to ""
                set this_subject to ""
                set this_content to ""
                set this_attachments to "No"
                *)

                -- GET THE MESSAGE ID OF MESSAGE
                set this_messageid to the messageid of this_message

                --GET THE DATE RECEIVED OF MESSAGE
                set this_date to the date received of this_message

                -- GET THE SENDER OF THIS MESSAGE
                set this_sender to the sender of this_message

                -- GET SUBJECT OF MESSAGE
                set this_subject to subject of this_message
                if this_subject is "" then set this_subject to "NO SUBJECT"

                -- GET CONTENT OF MESSAGE
                set this_content to (every character of content of this_message)
                if this_content is in {"", "?"} then set this_content to "NO CONTENT"

                --DETERMINE IF THERE ARE ATTACHMENTS
                if thisMessage's mail attachments is not {} then set this_attachments to "Yes"

                --GET THE MAILBOX ACCOUNT OF MESSAGE
                set this_account to account of mailbox of thisMessage

                -- CREATE DOCUMENT WITH EMAIL INFORMATION
                set this_document to open for access ("/Users/russellread/Desktop/SendToKeepIt/" & "Email " & this_subject & " " & this_messageid & ".txt") with write permission
                write "Airmail Link: " & "airmail://message?mail=" & this_account & "&messageid=" & this_messageid & return & "Mail Link: " & "message://" & "&messageid=" & this_messageid & return & return & "Date: " & this_date & return & "Subject: " & this_subject & return & "Sender: " & this_sender & return & "Attachments?: " & this_attachments & return & return & this_content to this_document
                close access this_document

            end repeat
        end tell
    end perform mail action with messages
end using terms from

The issue was mostly with mismatched variable names: for example, you defined a variable called this_message , but then referred later on in the script to an undefined variable called thismessage . 问题主要是变量名不匹配:例如,您定义了一个名为this_message的变量,但随后在脚本中将其引用为一个未定义的变量thismessage

Anyway, here's a revised version of your script: 无论如何,这是脚本的修订版:

property text item delimiters : linefeed

using terms from application "Mail"
    on perform mail action with messages these_messages for rule this_rule
        tell application "Mail"
            set the message_count to the count of these_messages
            repeat with i from 1 to the message_count
                set this_message to item i of these_messages

                set msg_attr to {this_messageid:message id ¬
                    , this_date:date received ¬
                    , this_sender:sender ¬
                    , this_subject:subject ¬
                    , this_content:content ¬
                    , this_account:name of account of mailbox ¬
                    , has_attachments:mail attachments} of this_message

                if msg_attr's this_subject is "" then ¬
                    set msg_attr's this_subject to "NO SUBJECT"
                ignoring white space
                    if msg_attr's this_content is in {"", "?"} then ¬
                        set msg_attr's this_content to "NO CONTENT"
                end ignoring

                if msg_attr's has_attachments ≠ {} then
                    set msg_attr's has_attachments to "Yes"
                else
                    set msg_attr's has_attachments to "No"
                end if

                -- CREATE DOCUMENT WITH EMAIL INFORMATION
                set fp to "/Users/CK/Desktop/" & "Email " & ¬
                    msg_attr's this_subject & space & ¬
                    msg_attr's this_messageid & ".txt"

                my Write_To_File(fp, msg_attr)
            end repeat
        end tell
    end perform mail action with messages
end using terms from


to Write_To_File(filepath as text, msg_attr as record)
    local filepath, msg_attr

    set folpath to (POSIX file filepath) & "::" as text as alias

    tell application "System Events" to make new file with properties ¬
        {name:folpath & "tmp-unnamed" as text}

    set this_document to folpath & "tmp-unnamed" as text as alias

    tell msg_attr to set txt to the contents of {¬
        ["Airmail Link: ", "airmail://message?mail=", its this_account, ¬
            "&messageid=", its this_messageid], ¬
        ["Mail Link: ", "message://", "messageid=", its this_messageid], ¬
        [], ["Date: ", its this_date], ¬
        ["Subject: ", its this_subject], ¬
        ["Sender: ", its this_sender], ¬
        ["Attachments?: ", its has_attachments], ¬
        [], its this_content} as text


    write the txt to this_document as «class utf8»

    tell application "System Events" to set name of this_document to filepath
end Write_To_File

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM