Eski posta iletilerini bulmak için AppleScript Komut Dosyası Düzenleyicisi'nde yavaş


2

Bu yüzden, çeşitli posta kutularındaki tüm mesajları yineleyen ve çeşitli ölçütlere uyan ve bunları Silinmiş Öğelere taşıyan mesajları alan bir AppleScript var. Söz konusu posta kutuları bir Exchange e-posta hesabıyla ilişkilidir.

Buradaki sorun, ScriptEditor'da bu betiğin dayanılmaz derecede yavaş olması ve çalışması sırasında Mail.app'ı kullanılamaz hale getirmesidir. Script osascript altında gayet iyi çalışıyor.

İlgili kod parçası aşağıda verilmiştir.

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:"person@company.com", 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

Yavaş olan ne? 1 mesaj sırasına göre bir saniye veya daha yavaş. Genellikle çok daha yavaş. Senaryo bir saat içinde biter (evet, çok fazla postam var) oscript altında ama ScriptEditor altında 8 saat içinde bitirmek için asla senaryoyu almadım. İşin garibi, zaman zaman saniyede yüzlerce mesajı işleyebilmesi, sonra yavaşlamaya devam etmesi.

İlginç: bazen Mail.app kilitli ve bazen değil. Kilitlendiğinde bir kilitlenme sorunu olduğundan şüpheleniyorum ama tutarlı değil. Genellikle ScriptEditor (Bence betiği oradan çalıştırıyorum) ve Mail her ikisi de tam bir CPU çekirdeği kullanıyor. ScriptEditor, genellikle Aktivite İzleyicisi'nde Tepkisiz olarak listelenir.

Disk performansının bir sorun olduğuna dair kanıt yok, bol miktarda bellek var. ScriptEditor ile Mail arasındaki garip bir etkileşim gibi görünüyor.

Bunun olmasının bir nedeni var mı?

Düzenleme: Tam kod


Merhaba, sorunuzdaki ilk senaryoyu inceledim. AppleScript Editor'da hiç çalışmaz. Çalıştırması için bazı "iş tahmin et" yaptım. Hem derleyen hem de çalışan tüm senaryoyu verecek misiniz?
Kaydell

Hassas bilgileri değiştirmek için tam kodu düzenledim. Bunun en verimli organizasyon olmadığını biliyorum, ancak test edemediğim bir şeyi yeniden düzenlemek zor.
Michael Conlen

Merhaba, buna bir cevap aldınız mı? Mail'in zayıf filtreleme özellikleri nedeniyle bir Applescript filtresi yazmak zorunda kaldım ve performans beni öldürüyor, sanki tüm bilgisayarım bataklığa düşmüş gibi.
Michael Kupietz

Kesin bir cevap alamadım, ancak IMAP'tan Exchange'e geçmeye yardımcı oldum (posta her zaman bir değişim sunucusuydu, sadece iletişim kurmak için kullanılan protokolü değiştirdim. Sonunda vazgeçtim ve farklı bir çözüme ulaştım. IMAP boru hattında bir soruna neden oluyor.
Michael Conlen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.