-- Downloaded From: http://c-command.com/scripts/eaglefiler/import-from-apple-mail -- Last Modified: 2012-01-06 on run tell application "Mail" if my isLionOrBetter() and (count of message viewers) is 1 then -- If there's more than one, and full screen mode is active, we can't tell which is frontmost return my importFromViewer(message viewer 1) else repeat with _viewer in message viewers if index of _viewer's window is 1 then my importFromViewer(_viewer) end if end repeat end if end tell end run on isLionOrBetter() tell application "Mail" set AppleScript's text item delimiters to "." set _versionString to version set _major to (first text item of _versionString) as number return _major ³ 5 end tell end isLionOrBetter using terms from application "Mail" on perform mail action with messages _messages my importMessages(_messages) end perform mail action with messages end using terms from on importFromViewer(_viewer) tell application "Mail" set _messages to (get selected messages of _viewer) my importMessages(_messages) end tell end importFromViewer on importMessages(_messages) set _paths to {} repeat with _message in _messages tell application "Mail" set _subject to subject of _message set _source to source of _message end tell set _path to my createTempFolder() & "/" & my makeFileName(_subject) my writeData(_path, _source) copy _path to end of _paths end repeat tell application "EagleFiler" import files _paths end tell end importMessages on writeData(_path, _data) set _file to POSIX file _path set _fd to open for access _file with write permission write _data to _fd close access _fd end writeData on createTempFolder() set _tempFolder to do shell script "mktemp -d -t 'EFImportAppleMail'" return _tempFolder end createTempFolder on makeFileName(_subject) set _clean to my replace(_subject, "/", ":") set _clean to my replace(_clean, ":", "-") set _extension to ".eml" set _hfsPlusLimit to 255 set _max to _hfsPlusLimit - (length of _extension) set _shortened to my substringToIndex(_clean, _max) return _shortened & _extension end makeFileName on substringToIndex(_string, _index) if length of _string > _index then set _end to _index else set _end to length of _string end if return my join(characters 1 thru _end of _string, "") end substringToIndex on replace(_string, _source, _replacement) return my join(my split(_string, _source), _replacement) end replace on join(_list, _sep) set _temp to AppleScript's text item delimiters set AppleScript's text item delimiters to _sep set _result to _list as string set AppleScript's text item delimiters to _temp return _result end join on split(_string, _sep) set _temp to AppleScript's text item delimiters set AppleScript's text item delimiters to _sep set _result to text items of _string set AppleScript's text item delimiters to _temp return _result end split