This is my first real attempt at applescript so I'm sure there are plenty of places it could be improved (like the fact that I'm hard coding the disk and temp directory names and not handling there being naming conflicts in the temp directory.) So your mileage may vary...
Code:
-- Copyright 2007 The Omni Group. All rights reserved.
-- Hacks by Bindu Wavell <bindu@wavell.net> allow for attachments to be processed
--
-- $Header: svn+ssh://source.omnigroup.com/Source/svn/Omni/branches/OmniFocus/1.x/OmniGroup/Applications/Focus/App/Preferences/MailAction.applescript 100519 2008-05-15 21:12:32Z bungi $
using terms from application "Mail"
--used the following while debugging to trigger script execution
--tell application "Mail"
-- set theSelectedMessages to selection
-- set theSelectedMessage to the first item in theSelectedMessages
--end tell
--process_message(theSelectedMessage)
on write_error_log(this_error)
set the error_log to ((path to desktop) as text) & "Script Error Log.log"
try
open for access file the error_log with write permission
write (this_error & return) to file the error_log starting at eof
close access file the error_log
on error
try
close access file the error_log
end try
end try
end write_error_log
-- Trims "foo <foo@bar.com>" down to "foo@bar.com"
on trim_address(theAddress)
try
set AppleScript's text item delimiters to "<"
set WithoutPrefix to item 2 of theAddress's text items
set AppleScript's text item delimiters to ">"
set MyResult to item 1 of WithoutPrefix's text items
on error
set MyResult to theAddress
end try
set AppleScript's text item delimiters to {""} --> restore delimiters to default value
return MyResult
end trim_address
on process_message(theMessage)
tell application "OmniFocus"
log "OmniFocus calling process_message in MailAction script"
end tell
-- Allow the user to type in the full sender address in case our trimming logic doesn't handle the address they are using.
set theSender to sender of theMessage
set trimmedSender to my trim_address(theSender)
tell application "OmniFocus"
set AllowedSender to allowed mail senders
if AllowedSender does not contain trimmedSender and AllowedSender does not contain theSender then
return
end if
end tell
set theAttachments to mail attachments of the theMessage
set theAttachmentCount to count of theAttachments
set theSubject to subject of theMessage
set singleTask to false
if (theSubject starts with "Fwd: ") then
-- Whole forwarded messages shouldn't split.
set singleTask to true
set theSubject to text 6 through -1 of theSubject
end if
set theText to theSubject & return & content of theMessage
tell application "OmniFocus"
tell default document
set theTasks to parse tasks with transport text theText as single task singleTask
end tell
end tell
set theTaskCount to the count of theTasks
if theTaskCount > 0 and theAttachmentCount > 0 then
set theTask to the first item in theTasks
repeat with theAttachmentIndex from 1 to theAttachmentCount
set theAttachment to item theAttachmentIndex of theAttachments
set theAttachmentFileName to name of theAttachment
set theFullAttachmentPath to "Macintosh HD:tmp:" & theAttachmentFileName
save theAttachment in theFullAttachmentPath
try
tell front document of application "OmniFocus"
tell the note of theTask
make new file attachment with properties {file name:theFullAttachmentPath, embedded:true}
end tell
end tell
on error errmesg number errn
write_error_log(errmesg & return & return & "error number: " & (errn as text))
end try
tell application "Finder"
if exists file theFullAttachmentPath then
delete file theFullAttachmentPath
end if
end tell
end repeat
end if
end process_message
on perform mail action with messages theMessages
try
set theMessageCount to count of theMessages
repeat with theMessageIndex from 1 to theMessageCount
my process_message(item theMessageIndex of theMessages)
end repeat
on error m number n
tell application "OmniFocus"
log "Exception in Mail action: (" & n & ") " & m
end tell
end try
end perform mail action with messages
end using terms from