Many moons ago, based on a friend’s script and my previous tinkering, I came up with an original AppleScript to archive my e-mail under a Personal/Year/Quarter
folder hierarchy, which was designed to be activated from either a Mail.app rule or via Mail Act-On.
That was four years or so ago, and in the meantime – for whatever idiotic reason – AppleScript has mutated yet again.
So here’s a new, updated version that works in Mountain Lion:
tell application "Mail"
set theSelection to selection
--loop through all selected messages
repeat with thisMessage in theSelection
set msgDate to date received of thisMessage
set msgMonth to month of msgDate as integer
set msgYear to year of msgDate as integer
set msgQuarter to ((round ((msgMonth - 1) / 3) rounding down) + 1)
set msgAccount to name of account of mailbox of thisMessage
set msgMailbox to name of mailbox of thisMessage
set mboxName to "Personal/" & msgYear & "/Q" & msgQuarter
tell account "iCloud"
try
set mbox to mailbox named mboxName
get name of mbox
on error
make new mailbox with properties {name:mboxName}
set mbox to mailbox named mboxName
end try
set mailbox of thisMessage to mailbox named mboxName
end tell
end repeat
end tell
(source)
Back in 2009, Snow Leopard’s services architecture had prompted me to revise the script a bit, so at the time I dropped it into an Automator service and bound it to ^P
for Mail alone, adding Growl notifications to boot:
on run {input, parameters}
tell application "Mail"
set theMessages to selection
set theCount to count of selection
if theCount = 0 then return input
repeat with thisMessage in theMessages
set msgDate to date received of thisMessage
set msgMonth to month of msgDate as integer
set msgYear to year of msgDate as integer
set msgQuarter to ((round ((msgMonth - 1) / 3) rounding down) + 1)
set msgAccount to name of account of mailbox of thisMessage
set msgMailbox to name of mailbox of thisMessage
set mboxName to "Personal/" & msgYear & "/Q" & msgQuarter
tell account "MobileMe"
try
set mbox to mailbox named mboxName
get name of mbox
on error
make new mailbox with properties {name:mboxName}
set mbox to mailbox named mboxName
end try
-- Important sanity check due to some IMAP servers deleting messages when moved atop themselves...
set curmbox to (get mailbox of thisMessage)
if mbox is not curmbox then
move thisMessage to mbox
end if
end tell
end repeat
end tell
tell application "GrowlHelperApp"
if theCount > 1 then
set suffix to "s"
else
set suffix to ""
end if
set the theNotification to {"Mail Notification"}
register as application "Mail" all notifications theNotification default notifications theNotification icon of application "Mail"
notify with name (item 1 of theNotification) title "Archiving " & theCount & " message" & suffix description "to " & mboxName application name "Mail"
end tell
return input
end run
(source)
Of course, these days all you need is Automator. So to use this yourself, create a new service inside Automator, paste the more recent source code into the Run AppleScript box and save it with whatever name it pleases you (I used “Archive to iCloud”).
Then go into System Preferences – Keyboard, create a new key binding for Mail and enter that same name as the title for the binding.