Applescript只附加一次然后不再附加

时间:2014-09-06 23:23:56

标签: applescript apple-mail

我有一个Applescript,可以将一堆垃圾邮件完美地附加到报告电子邮件 ONCE 。然后,无论是同一批垃圾邮件还是另一批新垃圾邮件,它都会在后续运行中停止连接任何垃圾邮件。即使它在后续运行中停止附加任何垃圾邮件,它也可以正常运行,因为它会创建报告电子邮件,解决它并在主题行上进行处理,从而提供报告的垃圾邮件计数。我有一种直觉,认为这可能是一个别名问题(因为它正在寻找错误的别名,因此无法附加垃圾邮件)但我无法完全看到如何修复它。我附上下面的Applescript,并附上个人信息。在Applescript Editor下运行它在附件循环的每次迭代之后,除了“ - >缺失值”(这甚至意味着什么?)之外没有任何错误。我在俯瞰什么?

-- User settable constants
set SPAMCOP_ACCOUNT to "REDACTED"
set SENDER_ADDRESS to "REDACTED"
set SPAMCOP_FOLDER_NAME to "SpamCop"

-- Variable initialization
set rawSpamFileList to {} -- List of names of spam files
set spamsProcessed to 0 -- Number of spams processed
set theOutputFolderPath to path to desktop folder -- Desktop folder path
set fullSpamCopFolderPath to (theOutputFolderPath & SPAMCOP_FOLDER_NAME & ":") -- Spam folder on Desktop

tell application "Finder"

    -- Create a SpamCop folder on Desktop if there isn't already one
    if (exists folder (fullSpamCopFolderPath as string)) = false then
        make new folder at theOutputFolderPath with properties {name:SPAMCOP_FOLDER_NAME}
    end if

    -- Count number of Spams to be processed
    set spamsProcessed to number of items of folder (fullSpamCopFolderPath as string)

    -- Set the list of names to the raw source folder to loop through
    set rawSpamFileList to name of every file of folder (fullSpamCopFolderPath as string)

    if (spamsProcessed > 0) then
        tell application "Mail"
            -- Create a blank spam-reporting email & set sender in it
            set spamReport to (make new outgoing message with properties {visible:true, content:" ", sender:SENDER_ADDRESS})

            -- Address it and add a tally of junk being reported    
            tell spamReport
                make new to recipient at end of to recipients with properties {address:SPAMCOP_ACCOUNT}
                set subject of spamReport to ((spamsProcessed) & " spam(s) being submitted for processing" as string)
                set visible to true

                -- Attach all the spams in SpamCopFolder as attachment(s) to spamReport.
                -- I SUSPECT THE PROBLEM IS IN THE REPEAT LOOP BELOW BUT I CAN'T SEE WHAT'S WRONG!

                repeat with thisSpamName in rawSpamFileList
                    try
                        set fullSpamPath to ((fullSpamCopFolderPath as string) & thisSpamName) -- Cast fullSpamCopFolderPath alias to string first!
                        make new attachment with properties {file name:(fullSpamPath as string)} at after the last word of the last paragraph
                    on error errmsg
                        display dialog ("Failed with errmsg: " & (errmsg as string)) buttons {"OK"} default button "OK"
                    end try
                end repeat
            end tell
        end tell

        set responseButton to button returned of (display dialog "Clean up SpamCop folder now?" buttons {"Yes", "No"} default button "No")
        if responseButton is "Yes" then
            delete every item of folder (fullSpamCopFolderPath as string) -- Send spams to trash
        else
            display dialog "Spam deletion aborted." buttons {"OK"} default button "OK"
        end if
    else
        display dialog "No spam to process!  Are you hallucinating?" buttons {"OK"} default button "OK"
    end if
end tell

以下是使用regulus6633提供的更正后的Applescript进行的35次垃圾邮件示例:

tell current application
    path to desktop
        --> alias "Macintosh HD:Users:username:Desktop:"
end tell
tell application "Finder"
    exists folder "Macintosh HD:Users:username:Desktop:SpamCop:"
        --> true
    count folder "Macintosh HD:Users:username:Desktop:SpamCop:"
        --> 35
    get name of every file of folder "Macintosh HD:Users:username:Desktop:SpamCop:"
        --> {"Spam-20140908064824.eml", "Spam-20140908081508.eml", "Spam-20140908082049.eml", "Spam-20140908082642.eml", "Spam-20140908083224.eml", "Spam-20140908091214.eml", "Spam-20140908091848.eml", "Spam-20140908092708.eml", "Spam-20140908093615.eml", "Spam-20140908093946.eml", "Spam-20140908101749.eml", "Spam-20140908101834.eml", "Spam-20140908102327.eml", "Spam-20140908102809.eml", "Spam-20140908102920.eml", "Spam-20140908103417.eml", "Spam-20140908104041.eml", "Spam-20140908104110.eml", "Spam-20140908112201.eml", "Spam-20140908113458.eml", "Spam-20140908124138.eml", "Spam-20140908124750.eml", "Spam-20140908125605.eml", "Spam-20140908130207.eml", "Spam-20140908130508.eml", "Spam-20140908132133.eml", "Spam-20140908132909.eml", "Spam-20140908134147.eml", "Spam-20140908134736.eml", "Spam-20140908143459.eml", "Spam-20140908143618.eml", "Spam-20140908160051.eml", "Spam-20140908160448.eml", "Spam-20140908173043.eml", "Spam-20140908191450.eml"}
end tell
tell application "Mail"
    make new outgoing message with properties {visible:true, content:" ", sender:"REDACTED"}
        --> outgoing message id 47
    make new to recipient at end of every to recipient of outgoing message id 47 with properties {address:"REDACTED"}
        --> to recipient 1 of outgoing message id 47
    set subject of outgoing message id 47 to "35 spam(s) being submitted for processing"
    set visible of outgoing message id 47 to true
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908064824.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908081508.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908082049.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908082642.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908083224.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908091214.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908091848.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908092708.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908093615.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908093946.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908101749.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908101834.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908102327.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908102809.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908102920.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908103417.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908104041.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908104110.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908112201.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908113458.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908124138.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908124750.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908125605.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908130207.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908130508.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908132133.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908132909.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908134147.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908134736.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908143459.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908143618.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908160051.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908160448.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908173043.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
    make new attachment with properties {file name:"Macintosh HD:Users:username:Desktop:SpamCop:Spam-20140908191450.eml"} at after last word of last paragraph of outgoing message id 47
        --> missing value
end tell
tell application "AppleScript Editor"
    display dialog "Clean up SpamCop folder now?" buttons {"Yes", "No"} default button "No"
        --> {button returned:"No"}
    display dialog "Spam deletion aborted." buttons {"OK"} default button "OK"
        --> {button returned:"OK"}
end tell
Result:
{button returned:"OK"}

2 个答案:

答案 0 :(得分:0)

我在这里看到一个错误:

set fullSpamCopFolderPath to (theOutputFolderPath & SPAMCOP_FOLDER_NAME & ":")

应该是:

set fullSpamCopFolderPath to (theOutputFolderPath as text & SPAMCOP_FOLDER_NAME & ":")

注意"作为文字"。您想要添加字符串,并且theOutputFolderPath不是字符串,因此您需要在将字符串SPAMCOP_FOLDER_NAME添加到其中之前将其设置为字符串。

这是另一个错误:

set subject of spamReport to ((spamsProcessed) & " spam(s) being submitted for processing" as string)

应该是:

set subject to (spamsProcessed as text) & " spam(s) being submitted for processing"

再次," spamsProcessed"是一个数字,你需要在添加另一个字符串之前使其成为一个字符串。另外,你在里面"告诉spamReport"因此,不需要垃圾邮件报告"。

最后,你应该移动所有的" Mail" Finder代码块之外的代码。告诉Finder告诉Mail做某事并且在将应用程序告知块嵌入彼此内部时经常导致难以发现的错误是没有意义的。

请尝试以下方法。我修复了一些其他的小错误并删除了所有的" as string"因为一旦你解决了这些错误,你就不需要了。我没有尝试过这段代码,但它应该有效。

-- User settable constants
set SPAMCOP_ACCOUNT to "REDACTED"
set SENDER_ADDRESS to "REDACTED"
set SPAMCOP_FOLDER_NAME to "SpamCop"

-- Variable initialization
set rawSpamFileList to {} -- List of names of spam files
set spamsProcessed to 0 -- Number of spams processed
set theOutputFolderPath to path to desktop folder -- Desktop folder path
set fullSpamCopFolderPath to ((theOutputFolderPath as text) & SPAMCOP_FOLDER_NAME & ":") -- Spam folder on Desktop

tell application "Finder"

    -- Create a SpamCop folder on Desktop if there isn't already one
    if not (exists folder fullSpamCopFolderPath) then
        make new folder at theOutputFolderPath with properties {name:SPAMCOP_FOLDER_NAME}
    end if

    -- Count number of Spams to be processed
    set spamsProcessed to number of items of folder fullSpamCopFolderPath

    -- Set the list of names to the raw source folder to loop through
    set rawSpamFileList to name of every file of folder fullSpamCopFolderPath
end tell

if (spamsProcessed > 0) then
    tell application "Mail"
        -- Create a blank spam-reporting email & set sender in it
        set spamReport to (make new outgoing message with properties {visible:true, content:" ", sender:SENDER_ADDRESS})

        -- Address it and add a tally of junk being reported    
        tell spamReport
            make new to recipient at end of to recipients with properties {address:SPAMCOP_ACCOUNT}
            set subject to (spamsProcessed as string) & " spam(s) being submitted for processing"
            set visible to true

            -- Attach all the spams in SpamCopFolder as attachment(s) to spamReport.
            -- I SUSPECT THE PROBLEM IS IN THE REPEAT LOOP BELOW BUT I CAN'T SEE WHAT'S WRONG!

            repeat with thisSpamName in rawSpamFileList
                try
                    set fullSpamPath to fullSpamCopFolderPath & thisSpamName
                    make new attachment with properties {file name:fullSpamPath} at after the last word of the last paragraph
                on error errmsg
                    display dialog ("Failed with errmsg: " & errmsg) buttons {"OK"} default button "OK"
                end try
            end repeat
        end tell
    end tell

    set responseButton to button returned of (display dialog "Clean up SpamCop folder now?" buttons {"Yes", "No"} default button "No")
    if responseButton is "Yes" then
        tell application "Finder"
            delete every item of folder fullSpamCopFolderPath -- Send spams to trash
        end tell
    else
        display dialog "Spam deletion aborted." buttons {"OK"} default button "OK"
    end if
else
    display dialog "No spam to process!  Are you hallucinating?" buttons {"OK"} default button "OK"
end if

答案 1 :(得分:0)

我自己解决了这个问题。解决方案只是替换这一行:

make new attachment with properties {file name:(fullSpamPath as string)} at after the last word of the last paragraph

用这个:

make new attachment with properties {file name:fullSpamPath as alias} at after the last word of the last paragraph

至于为什么前者只工作了一两次然后又不再工作,我不知道。从理论上讲,前者根本不应该有效。如果有人有任何可行的解释,我全都听见了。但我的代码现在按预期工作。