2014-09-06 3 views
1

У меня есть Applescript, который безупречно прикрепляет кучу спама к отчету электронной почты ОДИН. Затем он прекращает прикреплять любые спам в последующих тиражах независимо от того, является ли это одной и той же партией спама или другой новой партии спама. Несмотря на то, что в последующих сеансах он перестает прикреплять какие-либо спам, он в противном случае отлично работает, создавая электронную почту для отчетности, обращается к ней и берет на себя строку темы, в которой сообщается о количестве спама. У меня есть ощущение, что это, вероятно, проблема с псевдонимом (в том, что он ищет неправильный псевдоним и, следовательно, не может прикрепить спам), но я не могу понять, как его исправить. Я прилагаю Applescript ниже с личным сообщением. Запуск его в редакторе Applescript не дает мне никаких ошибок, кроме «-> отсутствующего значения» (что это означает даже?) После каждой итерации цикла привязки. Что я не замечаю?Applescript только присоединяется один раз, а затем уже не

-- 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 

Вот пример работа 35 спам с использованием скорректированного Applescript обеспечивает regulus6633:

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"} 

ответ

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» является числом, и вы должны сделать его строку, прежде чем добавить еще одну строку к нему. Кроме того, вы находитесь внутри «tell spamReport» и, следовательно, не нуждаетесь в «spamReport».

Наконец, вы должны переместить весь свой код «Почта» вне блока кода Finder. Не имеет смысла сообщать Finder, что он должен сказать Mail, чтобы что-то делать, и это часто приводит к труднодоступным ошибкам, когда вы вставляете блокировки приложений внутри друг друга.

Так что попробуйте следующее. Я исправил несколько других небольших ошибок и удалил все ваши «как строки», потому что, как только вы исправляете эти ошибки, вам это не нужно. Я не пробовал этот код, но он должен работать.

-- 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 
+0

К сожалению, исправленный Applescript, который вы указали выше, также демонстрирует то же поведение, что и мой оригинальный Applescript: он отлично работает * ONCE *, не более * TWICE * (с спамом, прикрепленным к сообщению электронной почты), тогда, когда все остальное бежать отлично, он останавливает прикрепление спамов на третьей попытке, будь то в редакторе Applescript или просто из меню. Я присоединяю вывод в окне Events/Replies редактора Applescript к моему первоначальному вопросу в надежде, что он может нанести вам несколько колоколов, потому что я просто высунулся, уставившись на него. –

+0

Я только что открыл что-то по-настоящему тайное: если я изменю Applescript в редакторе Applescript (например, добавив новую строку, которая в основном является NOP или изменяет адрес электронной почты на и из «REDACTED»), а затем запустите ее, Applescript снова начнет добавлять спам один или два раза, прежде чем перестать выполнять операцию привязки (всякая другая операция отлично работает). Я не хочу постоянно менять свой Applescript взад и вперед и боком, чтобы заставить его работать один или два раза. WTF здесь происходит ???? Это сводит меня с ума! –

+0

Подождите! Я думаю, что у меня есть решение. И это так просто, что это действительно «дог!». момент. Но мне нужно проверить его дальше, чтобы узнать, действительно ли мое решение действительно жизнеспособно или это был просто очередной результат. Вставай ... Я должен получить результат в ближайшие пару дней, когда снова появятся спам-волны ... –

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 

Относительно того, почему бывший просто работал один или два раза, а затем не раз после этого, я понятия не имею. Теоретически, первый не должен был работать вообще. Если у кого-то есть возможное объяснение, я все уши. Но мой код теперь работает так, как ожидалось.

Смежные вопросы