Hawk Wings and Mail Archiving

I’m a little behind on my reading, so I just noticed that Tim over at
Hawk Wings is linking to MailArchiveByDate. I guess that
explains the email I’ve received in the past few days asking for help.
:-)

Tim comments that my update notes for the 1.2 release don’t convey
much meaning. I looked, and sure enough, they aren’t end-user-ready
release notes. I’ll try again. The original version of the script asked
Mail for the current selection. That meant, if you triggered the action,
then changed the selection by clicking on the next message, the wrong
message might be archived. The new version uses the selection
information passed to the script as an argument, so it is more reliable.

That’s still not very interesting, unless you are writing your own
AppleScripts. Suffice to say, if you are planning to giving it a try,
download the most recent version posted.

Email Archives

Speaking of email, I’ve been working on an AppleScript to organize my
email boxes.

I use Mail.app under OS X, so searching is easy and quick. I can use
smart mailboxes as needed for subject-based organization, so I wanted to
move away from my existing subject-based organization scheme (a folder
for each person, job, client, etc.). But since I have about 7 years of
email on my machine, I still wanted to do better than one big mailbox.
Grouping the messages based on the date sent seemed to give me
manageable chunks, but I didn’t want to have to do that manually. So, I
came up with this script:

on archiveByDate(parentMailboxName)
tell application "Mail"
 set archiveMessages to the selection

 repeat with currentMessage in archiveMessages
  set receivedon to (date received of currentMessage)
  set archiveYear to (year of receivedon as string)
  if ((month of receivedon as number)

This automatically maintains a folder hierarchy like:

  • parentMailboxName
    • 2006
      • 01
      • 02

I use that script as a library, and have another script which I run
via a MailActOn action to file selected messages. The reason for
having a separate script is so I can separate personal messages from
work messages in the archive. For example,

set scriptDirectory to ((path to
 scripts folder as string) & "Mail Scripts")
set scriptPath to (scriptDirectory & ":MailArchiveByDate.scpt")
set theScript to (load script alias scriptPath)

tell theScript to archiveByDate("Personal")

saves my personal messages to a folder called “Personal”, while

set scriptDirectory to ((path to
 scripts folder as string) & "Mail Scripts")
set scriptPath to (scriptDirectory & ":MailArchiveByDate.scpt")
set theScript to (load script alias scriptPath)

tell theScript to archiveByDate("Work")

saves work messages to a separate set of folders.