AppleScript para encontrar mensajes de correo antiguos es lento en ScriptEditor

2

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

    
pregunta Michael Conlen 11.09.2013 - 19:48

0 respuestas

Lea otras preguntas en las etiquetas