Previous INDEX Next
Emacs startup delay on Windows 7 psgml-mode and emacs 24

Migrating from Thunderbird to Outlook email

My company provided a deal with Microsoft that allowed me to purchase Office 2010 Professional for less the 10 pounds. Hard to ignore. This version of Office includes Outlook, so I was able to use it as my email client that then Thunderbird.

The only problem was, how to migrate my old email messages from Thunderbird to Outlook? There's plenty of help to go in the other direction, but not so much for what I wanted to do.

However, it wasn't that difficult. I found a VB program, written by Ricardo Drizin, available here, that would import sets of .eml files into Outlook, so all I needed to do was write something to convert Thunderbird mbox files to a set of .eml files, suitable for Ricardo's program.

Here's the python program:

#!/usr/local/bin/python
"""
 NAME
    split.py

 SYNOPSIS
    python split.py [-r root_dir]  [-s regex] file [file] ...

 DESCRIPTION 

    split.py converts a Thunderbird mbox file into a set of .eml
    files.  Multiple mbox files may be specified on the command line.
    The resulting eml files are written to a directory with the same
    name as the mbox file.  Each eml directory is created in the
    directory named by the -r argument, or /tmp, if not specified.

    split.py supports the following command arguments:

    -f  suffix    sets suffix of output file.  Default is .eml.
                  A value of .eml causse split.py to strip white space
                  from the regex string (or Outlook isn't happy)
    -r root_dir   sets root directory for the output .eml directories and 
                  files
    -s regex      defines regular expression at which to split the input 
                  files.  Default (r'\n\nFrom -') works for Thunderbird 
                  mbox format.

 MODIFICATION HISTORY
 Mnemonic        Rel  Date     Who
 split.py        1.0  20120617 mpw
    Created
    
"""

import os
import re
import sys
import getopt


#+++++++++++++++++++++++++++++++++++++++++++++++++
# start of program
#+++++++++++++++++++++++++++++++++++++++++++++++++

# defaults
root_dir ="/tmp"
split_regex = r'\n\nFrom -'
suffix = ".eml"

# read command line arguments, if any
try:
    opts,args = getopt.getopt(sys.argv[1:],'f:r:s:')
    for o,v in opts:
        if o == '-r': root_dir = v
        elif o == '-f': suffix = v
        elif o == '-s': split_regex = v
except getopt.GetoptError:
    print("%s: illegal argument: %s"% (sys.argv[0],o))
    sys.exit(0)

sr = re.compile(split_regex)

for file in args:
    with open(file) as fp:
        content = fp.read()
    content = open(file).read()
    chunks = sr.split(content)
    headers = sr.findall(content)
    target_dir = root_dir+"/"+file
    if not os.path.exists(target_dir):
        os.makedirs(target_dir,mode=0777)
    fno = 0
    for chunk,header in zip(chunks,headers):
        if len(chunk.strip()) == 0: continue
        fn = "%s/%04d%s"%(target_dir,fno,suffix)
        h = open(fn,mode="w")
        if suffix == ".eml": 
            h.write(header.strip())
        else: 
            h.write(header)
        h.write(chunk)
        h.close()
        fno = fno+1
    print "Wrote %5d eml files to %s"%(fno,target_dir)
Previous INDEX Next
Emacs startup delay on Windows 7 psgml-mode and emacs 24