Import From Apple Mail (Plain Text)
Summary: Imports the selected or rule-processed messages from Apple Mail as .txt files.
Requires: EagleFiler
Install Location: ~/Library/Application Scripts/com.apple.mail or ~/Library/Scripts/Applications/Mail/
Last Modified: 2021-02-08
Description
Note: This script creates a human-readable plain text file. To import the full message source (including attachments), you should instead use the Import From Apple Mail script.
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 new mailbox file. This script is for situations where you want to:
- Import messages as individual .txt files instead of as a mailbox. You can import them into an existing folder if desired. This is less efficient than the normal way that EagleFiler stores messages in a mailbox, but for smaller numbers of messages you may find it more convenient.
- Automate importing the selected messages.
- Import the messages that are being processed by a Mail rule. (Note that, on macOS 10.13, if the message contains attachments, Mail might not download them before applying the rule, so they will not be included in the message source sent to EagleFiler.)
Unlike when using the capture key, the unread/flagged status and MailTags are not preserved.
Installation Instructions · Download in Compiled Format · Download in Text Format
Script
use AppleScript version "2.4"
use framework "Foundation"
use scripting additions
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()
considering numeric strings
return (system version of (system info)) ≥ "10.7"
end considering
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)
repeat with _message in _messages
my importMessage(_message)
end repeat
end tell
end importFromViewer
on importMessage(_message)
tell application "Mail"
set _subject to subject of _message
set _from to _message's sender
set _date to _message's date sent
set _to to content of header "to" of _message
try
set _cc to content of header "cc" of _message
on error
set _cc to ""
end try
set _body to _message's content
set _messageID to _message's message id
end tell
set _text to "Subject: " & _subject & return
set _text to _text & "From: " & _from & return
set _text to _text & "Date: " & _date & return
set _text to _text & "To: " & _to & return
if _cc is not "" then
set _text to _text & "Cc: " & _cc & return
end if
set _text to _text & return & _body
tell application "EagleFiler"
set {_record} to import plain text _text
set _record's title to _subject
set _record's basename to _subject
set _record's from name to _from
set _record's modification date to _date
set _record's creation date to _date
set _record's source URL to my URLFromMessageID(_messageID)
end tell
end importMessage
on URLFromMessageID(_messageID)
set _components to current application's NSURLComponents's alloc's init
_components's setScheme:"message"
_components's setHost:("<" & _messageID & ">")
return _components's |URL|'s absoluteString() as Unicode text
end URLFromMessageID