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