Cleanup Apple Mail folders with JXA

115 Views Asked by At

I want to write a JXA script which automatically deletes old mails from my folders. I found a solution, but it is very slow and I'm wondering if there is a way to speed this up.

Here is my script:

mailApp = Application("Mail");
mailApp.includeStandardAdditions = true;

var now = Date.now();

function calcDaysAge(date) {
    return ~~((now-date)/3600/24/1000) //~~((now - date) / (24*60*60*1000);
}

function deleteMessagesOf(mailbox, minDaysAge) {
    messages = mailApp.mailboxes.byName(mailbox).messages
    for (var i=messages.length-1; i>=0; i--) {
        message = messages[i]
        date = new Date(message.dateReceived())
        age = calcDaysAge(date)
        if (age > minDaysAge) {
            message.delete()
        }
    }
}

// delete mails older than 7 days from my Cronjobs mailbox.
deleteMessagesOf("Cronjobs", 7)
1

There are 1 best solutions below

0
On

Just found an answer to a similar problem. This seems to work much better, but can still run into a timeout when there is a large number of mails to be deleted:

mailApp = Application("Mail");
mailApp.includeStandardAdditions = true;

function deleteMessagesOf(mailbox, minDaysAge) {
    var cutoffDate = new Date(Date.now() - minDaysAge * 60 * 60 * 24 * 1000);
    messages = mailApp.mailboxes.byName(mailbox).messages.whose({ dateReceived: { '<': cutoffDate } })
    if (messages.length > 0) {
        mailApp.delete(messages)
    }
}

deleteMessagesOf("Cronjobs", 7)