InDesign scripting : lesson 22 showed an applescript that exports a pdf from InDesign and attaches it to an email — adding a subject and recipient along the way. here’s a variation that lets you email an existing file directly from the finder. the previous script used a predefined list of email addresses — this one accesses your address book.
the first part of the script compiles three lists — names, first names and email addresses. we start by creating three empty lists before moving on to copying the relevant data into those lists. then we use the choose from list command to create a UI for the user to make a selection from. mgPeople is the list of names for people in your address book who have an email address :
set mgPeople to {} set mgFirsts to {} set mgAddresses to {} tell application "Address Book" repeat with mgPerson in people tell mgPerson repeat with mgEmail in emails copy name to the end of mgPeople copy first name to the end of mgFirsts copy value of mgEmail to the end of mgAddresses end repeat end tell end repeat end tell choose from list mgPeople
you’ll notice the list is in a crazy order. that’s because the list is in ID order — the order in which the contacts were entered into your address book :
so, to make things a leetle easier, we need to reorder the list alphabetically. thanks to mark j. reed over at the apple mailing lists for the shell script :
set mgPeople to {} set mgFirsts to {} set mgAddresses to {} tell application "Address Book" repeat with mgPerson in people tell mgPerson repeat with mgEmail in emails copy name to the end of mgPeople copy first name to the end of mgFirsts copy value of mgEmail to the end of mgAddresses end repeat end tell end repeat end tell -- thanks to Mark J. Reed -- http://lists.apple.com/archives/applescript-users/2007/Mar/msg00086.html set text item delimiters of AppleScript to (ASCII character 10) set mgSortedPeople to paragraphs of (do shell script "echo " & quoted form of (mgPeople as string) & "| sort -d -f") set text item delimiters of AppleScript to "" ------------- choose from list mgSortedPeople with prompt "who you emailing then?" if result is not false then set mgChosenOne to item 1 of result else error number -128 end if
that last part captures the result of the dialog into a variable (mgChosenOne) or, if the user hits cancel instead, stops the script (error number -128). this is needed because of a quirk of the choose from list command — the cancel button doesn’t actually cancel the process it just returns a ‘false’ result. the observant will notice we’ve added our own prompt to this version of the dialog. you can also add a title to that top bar as well if you like :
the next bit simply matches up the chosen recipient with their first name and email address and captures those into variables too :
repeat with x from 1 to count of mgPeople if item x of mgPeople = mgChosenOne then set mgFirstName to item x of mgFirsts set mgChosenEmail to item x of mgAddresses end if end repeat
then we need to get a reference to the selected object in the finder. and we set a subject and content for the email message. you can see that we’re checking to see if the selected object is a file or folder first, then setting the subject and content accordingly. the subject will be the name of the file or folder and the content is our own chosen verbage :
tell application "Finder" set mgSelection to the selection set text item delimiters of AppleScript to ":" if class of (item 1 of mgSelection) is folder then set mgSubject to text item -2 of ((item 1 of mgSelection) as string) set mgContent to "Hi " & mgFirstName & return & return & "Here's that folder we were talking about." & return & return else set mgSubject to text item -1 of ((item 1 of mgSelection) as string) set mgContent to "Hi " & mgFirstName & return & return & "Here's the file you're waiting for." & return & return end if set text item delimiters of AppleScript to "." set mgSubject to text item 1 of mgSubject set text item delimiters of AppleScript to "" end tell
the last part creates the email based on all the bits and pieces we’ve put together in the other parts of the script. this is how you would do it for Mail. see InDesign scripting : lesson 22 to see how to do it for Outlook. for other email software, consult your applescript dictionary for that program :
tell application "Mail" activate set mgMessage to make new outgoing message with properties {subject:mgSubject, content:mgContent, visible:true} tell mgMessage make new to recipient with properties {name:mgChosenOne, address:mgChosenEmail} make new attachment with properties {file name:(mgSelection as alias)} at after last paragraph of content save end tell end tell
put all those bits together, customise it to your particular way of working, and you’ve got yourself a handy little timesaver. there are a number of ways to activate a script like this, but the easiest is to turn it into a service so that you can activate the script with a right-click or keyboard shortcut. see get file path of finder items which shows how to do this through automator.
the next post will show how to convert this script to allow for multiple attachments and multiple recipients.
til then, keep grunting.