Skip to content

Instantly share code, notes, and snippets.

@poritsky
Created November 28, 2012 03:38
Show Gist options
  • Save poritsky/4158877 to your computer and use it in GitHub Desktop.
Save poritsky/4158877 to your computer and use it in GitHub Desktop.
Pass Selected Mail Message to Markdown Formatted Text for Day One (Read Comment Below)
(*
Apple Mail to Markdown Formatted Text For Day One Importauto
Adapted from 'Apple Mail -- Text File Exporter w/ Basic Header Info' by Justin Lancy:
http://veritrope.com/code/apple-mail-export-to-text-file-w-basic-header-info
Adapted from the original script by Hans Erik Hazelhorst
http://veritrope.com/code/export-apple-mail-messages-and-notes-to-text-files
*)
property growlName : "MailTextExport"
property appName : "Mail"
property successCount : "0"
(* CHECK FOR GROWL *)
tell application "System Events"
set processnames to name of every process
end tell
if appIsRunning("GrowlHelperApp") then
set isRunning to true
tell application "GrowlHelperApp"
set allNotificationsList to {"Success Notification", "Failure Notification"}
set enabledNotificationsList to {"Success Notification", "Failure Notification"}
register as application growlName all notifications allNotificationsList default notifications enabledNotificationsList icon of application appName
end tell
end if
(*MAIN PROGRAM *)
(*TEMP FILES PROCESSED ON THE DESKTOP*)
tell application "Finder"
if (the folder "Temp Export Folder" exists) then set FolderLoc to (the folder "Temp Export Folder")
if not (the folder "Temp Export Folder" exists) then
set FolderLoc to (make new folder at (path to desktop folder) with properties {name:"Temp Export Folder"})
end if
set SaveLoc to FolderLoc as string
end tell
(*APPLE MAIL ITEM SELECTION *)
tell application "Mail"
try
if (selection is not {}) then
set theMessages to selection
set msgnr to 1
repeat with thisMessage in theMessages
set recipientlist to (to recipients of thisMessage)
(*Adding the Recipients in a separate variable *)
set theRecipients to "**To:** "
repeat with CurrentRecipient in recipientlist
set theRecipients to theRecipients & (address of CurrentRecipient) & "; " & (name of CurrentRecipient) as rich text
end repeat
(*...and also the cc-Recipients in a separate variable *)
set CcRecipientList to cc recipients of thisMessage
set theCcRecipients to "**Cc:** "
repeat with CurrentCCRecipient in CcRecipientList
set theCcRecipients to theCcRecipients & (name of CurrentCCRecipient) & " (" & (address of CurrentCCRecipient) & "); " as rich text
end repeat
set myTitle to the subject of thisMessage
set myContent to the content of thisMessage as string
set messageMeat to (do shell script "echo " & (quoted form of myContent) & "")
set ReplyAddr to the reply to of thisMessage
set afzendername to extract name from sender of thisMessage
set afzenderaddress to extract address from sender of thisMessage
set EmailDate to the date received of thisMessage
set theSource to the source of thisMessage
set messageURL to the message id of thisMessage
(*Custom header with some standard data *)
set CustomHeader to "## Email Message from " & afzendername & return & return & "[View Original Message](message://%3c" & messageURL & "%3e)" & return & return & "**Subject:** " & myTitle & return & "**From:** " & afzendername & " (" & afzenderaddress & ")" & return & "**Date:** " & EmailDate
(*CLEAN TITLE FOR FILE *)
set previousDelimiter to AppleScript's text item delimiters
set potentialName to myTitle
set legalName to {}
set illegalCharacters to {".", ",", "/", ":", "[", "]"}
repeat with thisCharacter in the characters of potentialName
set thisCharacter to thisCharacter as rich text
if thisCharacter is not in illegalCharacters then
set the end of legalName to thisCharacter
end if
end repeat
set AppleScript's text item delimiters to ""
if length of legalName is greater than 32 then
set legalName to items 1 thru 32 of legalName as rich text
else
set legalName to legalName as rich text
end if
set AppleScript's text item delimiters to previousDelimiter
set theFileName to legalName
(* Return Text *)
set theText to messageMeat
set theFilePath to (SaveLoc & msgnr & "_" & theFileName & ".txt")
set msgnr to msgnr + 1
--return CustomHeader & return & theRecipients & return & theCcRecipients & return & return & "---" & return & return & theText
return CustomHeader & return & return & "---" & return & return & theText
set successCount to successCount + 1
end repeat
(* GROWL *)
if "GrowlHelperApp" is in processnames then
tell application "GrowlHelperApp" -- GROWL SUCCESS
notify with name ¬
"Success Notification" title ¬
"Export Success" description "Successfully Exported " & successCount & ¬
" Messages to Export Folder!" application name growlName
end tell
set successCount to 0
end if
else if "GrowlHelperApp" is in processnames then
tell application "GrowlHelperApp" -- GROWL FAILURE FOR NO SELECTION
notify with name ¬
"Failure Notification" title ¬
"Export Failure" description ¬
"No Messages or Notes Selected!" application name growlName
end tell
else if "GrowlHelperApp" is not in processnames then -- NON-GROWL ERROR MSG. FOR NO SELECTION
display dialog "No Messages or Notes Selected!" with icon 0
end if
(* ERROR HANDLING *)
on error errText number errNum
if "GrowlHelperApp" is in processnames then
tell application "GrowlHelperApp" -- GROWL FAILURE FOR ERROR
notify with name ¬
"Failure Notification" title ¬
"Import Failure" description "Failed to export " & return & myTitle & ¬
"\" due to the following error: " & return & errText ¬
application name growlName
end tell
else if "GrowlHelperApp" is not in processnames then -- NON-GROWL ERROR MSG. FOR ERROR
display dialog "Item Failed to Export: " & errNum & return & errText with icon 0
end if
end try
end tell
(* SUBROUTINES *)
on appIsRunning(appName)
tell application "System Events" to (name of processes) contains appName
end appIsRunning
--REPLACE SUBROUTINE
on replaceString(theString, theOriginalString, theNewString)
set {od, AppleScript's text item delimiters} to {AppleScript's text item delimiters, theOriginalString}
set theStringParts to text items of theString
if (count of theStringParts) is greater than 1 then
set theString to text item 1 of theStringParts as string
repeat with eachPart in items 2 thru -1 of theStringParts
set theString to theString & theNewString & eachPart as string
end repeat
end if
set AppleScript's text item delimiters to od
return theString
end replaceString
@poritsky
Copy link
Author

Download The Automator Workflow

This AppleScript passes the current selected message in Apple Mail to plain text, formatted for a decent looking entry in Day One. There's probably a lot of cruft in there as it's a mod of Justin Lancy's Apple Mail -- Text File Exporter. The script is here for your hacking, but it only does half the job.

The above Automator workflow is a frankenscript of this AppleScript and Brett Terpstra's Clip to Day One Service. Trigger it however you like and the currently selected message will find its way to Day One on your Mac. Give it a spin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment