Thread: OF Task to Mail
View Single Post
@jhncbrwn...thanks for the great script. I'm impressed with your "beginner" "hack" of a script. If this is what you do as a beginner, I'd be curious to see your expert scripts! I don't even know where to start with AppleScript.

I have some feature requests for your script. Another OF user built a script that sent a task to Inbox w/ a "Waiting For" context...it had two features I'd love to see in your script.
1. It placed the url "link-back" to the sent email into the note field of the action it produced in OF. This is very nice for being able to track my "delegation."
2. It produced a Growl notification (if Growl was installed) notifying of the action being produced in OF...which is reassuring to OCD people like myself

I'm not sure if the url link-back feature is possible in your script, because the OF -> email is opposite the email -> OF direction of his script. But like I said...I have no idea of AppleScripts abilities.

Here are the links to his OF forum post and his blog:
http://forums.omnigroup.com/showthread.php?t=12810
http://www.simplicityisbliss.com/200...y-applescript/

Code:
(*
	Waiting For Mails to OmniFocus Script
	by simplicityisbliss.com, Sven Fechner
	
	Based on an Outbox Rule in Mail.app this script adds specific messages
	to the OmniFocus Inbox with the waiting for context
	
	MailTags (www.indev.ca) is required to define the Outbox Rule to only
	create tasks for those outgoing emails that are to be tracked in OmniFocus
	
	The script uses Growl for feedback notification if it is installed and running
	
*)


--!! EDIT THE PROPERTIES BELOW TO MEET YOUR NEEDS !!--

-- Do you want the actualy mail body to be added to the notes section of the OmniFocus task?
-- Set to 'true' is or 'false' if no
property mailBody : true

-- Text between mail recipient (the person you are waiting for to come back) and the email subject
property MidFix : "to follow up re:"

-- Name of your Waiting For context in OmniFocus
property myWFContext : "Waiting For"

-- !! STOP EDITING HERE IF NOT FAMILAR WITH APPLESCRIPT !! --

--Configuration for Growl messages 
property GrowlRun : false
property scriptName : "Waiting For Mails to OmniFocus"
property notifySuccess : "Success Notification"
property notifyFail : "Failed Notification"
property titleSuccess : "Waiting For Mail added"
property titleFail : "Waiting For Mail to OmniFocus FAILED"
property txtSuccess : " added to OmniFocus successfully"
property txtFail : " to OmniFocus to add successfully"
property txtIcon : "OmniFocus"

on perform_mail_action(theData)
	
	--Check if Growl is running
	tell application "System Events" to set GrowlRun to (count of (every process whose name is "GrowlHelperApp")) > 0
	
	--Setup Growl
	if GrowlRun then tell application "GrowlHelperApp" to register as application scriptName all notifications {notifySuccess, notifyFail} default notifications {notifySuccess, notifyFail} icon of application txtIcon
	
	--Get going
	tell application "Mail"
		set theMessages to |SelectedMessages| of theData --Extract the messages from the rule
		repeat with theMessage in theMessages
			set theSubject to subject of theMessage
			set theRecipient to name of to recipient of theMessage
			set theMessageID to urlencode(the message id of theMessage) of me
			
			-- Check if there is one or more recipients
			if (count of theRecipient) > 1 then
				set theRecipientName to (item 1 of theRecipient & (ASCII character 202) & "and" & (ASCII character 202) & ((count of theRecipient) - 1) as string) & (ASCII character 202) & "more"
			else
				set theRecipientName to item 1 of theRecipient
			end if
			
			set theTaskTitel to theRecipientName & (ASCII character 202) & MidFix & (ASCII character 202) & theSubject
			set messageURL to "Created from message://%3C" & (theMessageID) & "%3E"
			set theBody to messageURL
			if mailBody then set theBody to theBody & return & return & the content of theMessage
			
			-- Add waiting for context task to OmniFocus
			tell application "OmniFocus"
				tell default document
					set theContext to context myWFContext
					make new inbox task with properties {name:theTaskTitel, note:theBody, context:theContext}
				end tell
			end tell
			my GrowlSuccess("Mail: " & theSubject)
		end repeat
	end tell
	
end perform_mail_action

on GrowlSuccess(theMessage)
	if GrowlRun then tell application "GrowlHelperApp" to notify with name notifySuccess title titleSuccess description theMessage & txtSuccess application name scriptName
end GrowlSuccess

on urlencode(theText)
	set theTextEnc to ""
	repeat with eachChar in characters of theText
		set useChar to eachChar
		set eachCharNum to ASCII number of eachChar
		if eachCharNum = 32 then
			set useChar to "+"
		else if (eachCharNum ≠ 42) and (eachCharNum ≠ 95) and (eachCharNum < 45 or eachCharNum > 46) and (eachCharNum < 48 or eachCharNum > 57) and (eachCharNum < 65 or eachCharNum > 90) and (eachCharNum < 97 or eachCharNum > 122) then
			set firstDig to round (eachCharNum / 16) rounding down
			set secondDig to eachCharNum mod 16
			if firstDig > 9 then
				set aNum to firstDig + 55
				set firstDig to ASCII character aNum
			end if
			if secondDig > 9 then
				set aNum to secondDig + 55
				set secondDig to ASCII character aNum
			end if
			set numHex to ("%" & (firstDig as string) & (secondDig as string)) as string
			set useChar to numHex
		end if
		set theTextEnc to theTextEnc & useChar as string
	end repeat
	return theTextEnc
end urlencode
Obviously your script is awesome as it is...these are just two features I would personally add if I had the knowledge. If somebody else would give it a whirl...I'd be very appreciative.

Cheers...Brett

Last edited by bpwhistler; 2009-08-17 at 10:50 AM..