Created
June 1, 2012 00:20
-
-
Save akkunchoi/2847462 to your computer and use it in GitHub Desktop.
Apple Mail -- Text File Exporter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(* | |
This script is modified by akkunchoi to change filename rule. | |
The original source of this script is written by veritrope.com. | |
http://veritrope.com | |
Apple Mail -- Text File Exporter | |
Version 1.1 | |
January 17, 2011 | |
Project Status, Latest Updates, and Comments Collected at: | |
http://veritrope.com/code/export-apple-mail-messages-and-notes-to-text-files | |
Installation: Just double-click on the script! | |
FastScripts Installation (Optional, but recommended): | |
--Download and Install FastScripts from http://www.red-sweater.com/fastscripts/index.html | |
--Copy script or an Alias to ~/Library/Scripts/Applications/Mail | |
--Set up your keyboard shortcut | |
CHANGELOG: | |
1.10 ADDED INCREMENTAL COUNTER FOR MESSAGES WITH SAME TITLES (THANKS HANS ERIK!) | |
1.00 INITIAL RELEASE | |
*) | |
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 myTitle to the subject of thisMessage | |
set myContent to the content of thisMessage as text | |
set ReplyAddr to the reply to of thisMessage | |
set EmailDate to the date received of thisMessage | |
set theSource to the source of thisMessage | |
(*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 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 text | |
else | |
set legalName to legalName as text | |
end if | |
set AppleScript's text item delimiters to previousDelimiter | |
set theFileName to legalName | |
(*EXPORT TO TXT FILE *) | |
set theText to myContent | |
(* Modified by akkunchoi *) | |
set theFilePath to (SaveLoc & theFileName & ".txt") | |
if isExistItem(theFilePath) of me then | |
set theFilePath to (SaveLoc & theFileName & "_" & msgnr & ".txt") | |
end if | |
log (theFilePath) | |
set msgnr to msgnr + 1 | |
set theFileReference to open for access theFilePath with write permission | |
write theText to theFileReference as «class utf8» | |
close access theFileReference | |
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 | |
on isExistItem(thePosixPath) | |
tell application "System Events" | |
get exists file thePosixPath | |
end tell | |
end isExistItem | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment