AppleScript per trovare vecchi messaggi di posta è lento in Script Editor

2

Quindi ho un AppleScript che itera su tutti i messaggi in varie caselle di posta e trova messaggi che soddisfano vari criteri e li sposta in Elementi eliminati. Le cassette postali in questione sono associate a un account di posta elettronica di Exchange.

il problema è che questo script è insopportabilmente lento in ScriptEditor e mentre viene eseguito spesso rende Mail.app inutilizzabile. Lo script funziona bene sotto osascript.

Il frammento di codice rilevante è riportato di seguito

set accountList to {"Gmail"}
set folderList to {¬
{accountName:"Gmail", mailboxName:"INBOX/Stuff", staleDays:21}, ¬
{accountName:"Gmail", mailboxName:"INBOX/Things", staleDays:21} ¬
    }
set emailList to {¬
{accountName:"Gmail", fromAddress:"[email protected]", staleDays:14} ¬
    }
set excludeList to {"Trash", "Send Messages", "Drafts", "Deleted Messages", "Archive", "Deleted Items", "Sent Items"}

set currentDate to current date

tell application "Mail"
repeat with curFolder in folderList
    set curAccountName to the accountName of curFolder
    set mailAccount to account curAccountName
    set mailboxName to mailboxName of curFolder
    set curMailbox to mailbox mailboxName of account curAccountName
    repeat with i from 1 to number of messages in curMailbox
        try
            set curMessage to message i of curMailbox
            set difference to (currentDate - (date sent of curMessage)) div days
            if difference is greater than (staleDays of curFolder) then
                set mailbox of curMessage to mailbox "Trash" of account of mailbox of curMessage
            end if
        end try
    end repeat
end repeat

repeat with curAddress in emailList
    set curAccountName to the accountName of curAddress
    set mailAccount to account curAccountName
    set everyMailbox to every mailbox of mailAccount
    repeat with curMailbox in everyMailbox
        set curMailboxName to the name of curMailbox
        if curMailboxName is not in excludeList then
            repeat with i from 1 to number of messages in curMailbox
                try
                    set curMessage to message i of curMailbox
                    set difference to (currentDate - (date sent of curMessage)) div days
                    if difference is greater than (staleDays of curAddress) then
                        if (sender of curMessage) is (fromAddress of curAddress) then
                            set mailbox of curMessage to mailbox "Trash" of account of mailbox of curMessage
                        end if
                    end if
                end try
            end repeat
        end if
    end repeat
end repeat
end tell

Che cos'è lento? Qualcosa nell'ordine di 1 messaggio un secondo o più lento. Spesso molto più lento. La sceneggiatura termina in un'ora o giù di lì (sì, ho un sacco di posta) sotto osascript ma non ho mai ottenuto lo script per completare entro 8 ore sotto ScriptEditor. La cosa strana è che a volte può elaborare centinaia di messaggi al secondo, quindi tornare a essere lento.

Interessante: a volte Mail.app è bloccato e, a volte, non lo è. Quando viene bloccato, sospetto che ci sia un problema di deadlock ma non è coerente. Di solito ScriptEditor (sto eseguendo lo script da lì) e Mail utilizzano entrambi un nucleo completo di CPU. ScriptEditor spesso elenca come non rispondente in Activity Monitor.

Non ci sono prove che le prestazioni del disco siano un problema, c'è molta memoria libera. Sembra davvero una strana interazione tra ScriptEditor e Mail.

Esistono motivi noti per cui ciò potrebbe accadere?

Modifica: codice completo

    
posta Michael Conlen 11.09.2013 - 19:48
fonte

0 risposte

Leggi altre domande sui tag