Import From Outlook
Summary: Imports the selected messages from Outlook as .eml files.
Requires: EagleFiler
Install Location: ~/Library/Scripts/Applications/Microsoft Outlook/
Last Modified: 2019-10-02
Description
The recommended way to import from Outlook 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 .eml files instead of as a mailbox. You can import them into an existing folder if desired.
- Automate importing the selected messages.
The unread/flagged status and categories in Outlook are converted to tags in EagleFiler.
If you want the script to bring up the options window asking you where import the messages, remove the --
before with asking for options
.
Installation Instructions · Download in Compiled Format · Download in Text Format
Script
on
run
tell
application
"Microsoft Outlook"
set
_messages
to
my
messagesFromSelection()
my
importMessages(
_messages)
end
tell
end
run
on
messagesFromSelection()
tell
application
"Microsoft Outlook"
with
timeout
of
5 * 60
seconds
set
_selection
to
selected objects
if
_selection
is
{}
then
try
return
selected folder's
messages
-- can't get "selected folder" if "Sent Items" is selected
end
try
end
if
return
current messages
end
timeout
end
tell
end
messagesFromSelection
on
importMessages(
_messages)
repeat
with
_message
in
_messages
tell
application
"Microsoft Outlook"
set
_subject
to
my
subjectFromMessage(
_message)
set
_source
to
source
of
_message
end
tell
set
_path
to
my
createTempFolder() & "/" &
my
makeFileName(
_subject)
my
writeData(
_path,
_source)
tell
application
"EagleFiler"
import
files
{
_path}
tag names
my
tagsFromMessage(
_message)
-- with asking for options
end
tell
end
repeat
end
importMessages
on
tagsFromMessage(
_message)
tell
application
id
"com.microsoft.Outlook"
set
_tags
to
{}
if
_message's
todo flag
is
not
not flagged
then
copy
"flagged"
to
end
of
_tags
if
_message's
forwarded
then
copy
"forwarded"
to
end
of
_tags
if
not
_message's
is read
then
copy
"unread"
to
end
of
_tags
if
_message's
redirected
then
copy
"redirected"
to
end
of
_tags
if
_message's
replied to
then
copy
"replied"
to
end
of
_tags
set
_categories
to
_message's
category
repeat
with
_category
in
_categories
copy
name
of
_category
to
end
of
_tags
end
repeat
return
_tags
end
tell
end
tagsFromMessage
on
subjectFromMessage(
_message)
tell
application
"Microsoft Outlook"
set
_subject
to
subject
of
_message
if
_subject
is
missing value
or
_subject
is
""
then
return
"<no subject>"
else
return
_subject
end
if
end
tell
end
subjectFromMessage
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 'EFImportOutlook'"
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