Tengo un AppleScript que itera sobre todos los mensajes en varios buzones y encuentra mensajes que cumplen con varios criterios y los mueve a Elementos eliminados. Los buzones en cuestión están asociados con una cuenta de correo electrónico de Exchange.
el problema es que esta secuencia de comandos es insoportablemente lenta en ScriptEditor y mientras se ejecuta, a menudo hace que Mail.app sea inutilizable. El script se ejecuta bien bajo osascript.
El fragmento de código relevante se muestra a continuación
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
¿Qué es lento? Algo en el orden de 1 mensaje un segundo o más lento. A menudo mucho más lento. La secuencia de comandos finaliza en aproximadamente una hora (sí, tengo mucho correo) bajo osascript pero nunca obtuve la secuencia de comandos para completar dentro de las 8 horas bajo ScriptEditor. Lo extraño es que a veces puede procesar cientos de mensajes por segundo y luego volver a ser lento.
Interesantemente: algunas veces Mail.app está bloqueado y otras no. Cuando está bloqueado, sospecho que hay un problema de interbloqueo, pero no es consistente. Por lo general, ScriptEditor (estoy ejecutando el script desde allí) y Mail están usando un núcleo completo de CPU. ScriptEditor a menudo se muestra como No responde en el Monitor de actividad.
No hay evidencia de que el rendimiento del disco sea un problema, hay mucha memoria libre. Realmente parece ser una interacción extraña entre ScriptEditor y Mail.
¿Hay alguna razón conocida por la que esto sucedería?
Editar: Código completo