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