Import From Apple Mail
Summary: Imports the selected or rule-processed messages from Apple Mail as .eml files.
Requires: EagleFiler
Install Location: ~/Library/Scripts/Applications/EagleFiler/
Description
The recommended way to import from Apple Mail is to select some messages and press the capture key. That will import the messages as a mailbox file. This script is for when you need to automate importing the selected messages or when you want to import the messages that are being processed by a Mail rule. Unlike when using the capture key, the messages are imported as individual .eml files, and the unread/flagged status and MailTags are not preserved. It’s also possible to modify the script to prompt you for options.
Download in Compiled Format · Download in Text Format
Script
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 splitLast Modified: 2012-01-06
Running the Script
You can use AppleScript Editor (AppleScript Utility prior to Mac OS X 10.6) to enable Mac OS X’s built-in Script menu. To run the script, just select it from the menu. FastScripts provides a similar menu that supports keyboard shortcuts and other features.