Save attachments from Mail.app based on subject I have been trying to write an Applescript to help me saving attachments, but realized quickly that I do not have the knowledge to do such a difficult script. Here is some background.

We receive daily sales reports, and flight manifests. The format in the subject should be: dd.mm.yyyy/"two letter airline code".DSR.Weight.

I.e. 30.01.2013/VS.DSR.1110KG

In the case of the manifest, in the same format, substitute DSR with MNFST.

I.e. 30.01.2013/VS.MNFST.1110KG.

There are however countless variations to the subject, and we are all human, and sometimes , is used, or more / etc. Our staff are great and work extremely hard, and the last thing they need me to do is be on their case about subject formats.

Therefore I was trying to get an Applescript to look at the two things that are always in the subject. The airlines two letter code, and the word DSR or MNFST/MFST/Manifest

We have the following two letter codes, sometimes in lower, or uppercase or a mix.

CV VS SAA TK DHV LH

Now the DSR can be in the subject in a number of ways, its not always seperated, ie. 30.01.2013/VSDSR1110KG

Same applies for MNFST/MFST/Manifest.

Ideally, I need a script to work in two parts:

DSR:


Check the subject for the flight code and DSR
Save the .xls attachment to /DSR/Airline two letter code
If File is more recent (A correction might be sent later that day/early the next morning.), add 1, if another 2 etc.


I.e. 30.01.2013/VS.DSR.1110KG.xls: Macintosh HD/Users/(My username)/Dropbox/DSR/VS
I.e. 30.01.2013/CV.DSR.1110KG.xls: Macintosh HD/Users/(My username)/Dropbox/DSR/CV

Manifest (Sometimes a .xls/.pdf/.zip file. It varies.)


Check the subject for the flight code and (Manifest or MNFST or MFST)
Save the .xls/.pdf/.zip attachment to Manifests/Airline two letter airline code
If the file is more recent (I.e. a file conflict with the same name. A correction might be sent later that day/early the next morning.), add 1, if another 2 etc. 


I.e. For VS: Macintosh HD/Users/(My username)/Dropbox/Manifests/VS

From the 3 hours I spent attempting this and getting nowhere fast, I thought someone might find this an interesting challenge, and it would be greatly appreciated!

Meanwhile, I am going to be reading up on Applescript in my free time, very powerful tool and time saver!
First create a rule that looks for ANY  of the Manifest in all of the variations or DSR 

Like So:



Then save this script (assuming you are using 10.8 Mountain Lion. )
In the folder ~/Library/Application Scripts/com.apple.mail/

    using terms from application "Mail"
    on perform mail action with messages theMessages for rule theRule

        set codeList to {"CV", "VS", "SAA", "TK", "DHV", "LH"}
        set subFolder to ""
        set theDate to do shell script "date +%Y_%m_%d_%H%M%S"
        --set ruleName to name of theRule





        -- The folder to save the attachments in (must already exist)
        tell application "Finder" to set attachmentsFolder to ((path to home folder as text) &amp; "Dropbox:DSR") as text

        tell application "Mail"

            repeat with eachMessage in theMessages
                set theSubject to subject of eachMessage
                repeat with i from 1 to number of items in codeList
                    set this_item to item i of codeList
                    if theSubject contains this_item then

                        set subFolder to this_item

                    end if
                end repeat
                if (count of (eachMessage's mail attachments)) &gt; 0 then


                    try

                        tell application "Finder"

                            if not (exists folder subFolder of folder attachmentsFolder) then
                                make new folder at attachmentsFolder with properties {name:subFolder}
                            end if
                        end tell
                        -- Save the attachment
                        repeat with theAttachment in eachMessage's mail attachments

                            set originalName to name of theAttachment
                            set savePath to attachmentsFolder &amp; ":" &amp; subFolder &amp; ":" &amp; originalName

                            tell application "Finder"

                                if (exists file originalName of folder subFolder of folder attachmentsFolder) then
                                    set savePath to attachmentsFolder &amp; ":" &amp; subFolder &amp; ":" &amp; theDate &amp; "_" &amp; originalName
                                end if
                            end tell
                            try
                                save theAttachment in file (savePath)



                            end try
                        end repeat


                    end try

                end if

            end repeat

        end tell
    end perform mail action with messages
end using terms from


And point the Run Applescript at it.

If you are using an earlier Mac OS. Then you should be able to place the script where ever you want.

Thats it.

My tests all have worked. But it is late here and I should be in bed. So let me know if any issues and I will try and sort. :-)

The one thing to note is I have added a time stamp instead of a number for same named files. It is more reliable.