Import From Outlook

Summary: Imports the selected messages from Outlook as .eml files.
Requires: EagleFiler
Install Location: ~/Library/Scripts/Applications/Microsoft Outlook/

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:

Unlike when using the capture key, the unread/flagged status, categories, and project are not preserved.

If you want the script to bring up the options window asking you where import the messages, remove the -- before with asking for options.

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)
    
set _paths to {}
    
repeat with _message in _messages
        
tell application "Microsoft Outlook"
            
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 -- with asking for options
    
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 '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

Last Modified: 2012-09-18

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.