Skip to main content

Importing PST files into Thunderbird using libpst

· 4 min read

For a number of reasons, I've finally switched from the hopeless Outlook Express to Mozilla Thunderbird... and so far, I really like the change. However, now that I've got Thunderbird, I find myself wanting to import my old Outlook PST file from a couple of years ago...

Now, it's worth pointing out that if you have Outlook installed on your PC, then PST importing is very easy - Thunderbird simply uses Outlook's MAPI interface to request all mail folders. However, if, like me, you don't have Outlook installed, and don't want to install it either, then you need to do a bit more work.

First of all, you need something that will extract the emails from the PST file, and save them in a "standard" format. In this case, I decided to use the excellent readpst utility (part of the libpst project). So the first step is to download, make, and install the libpst package, using the standard steps as described in that package's INSTALL notes.

wget http://alioth.debian.org/frs/download.php/1910/libpst-0.5.2.tar.gz
tar xzf libpst-0.5.2.tar.gz
cd libpst-0.5.2
make
su - root
make install

Now that's done, it's pretty simple to extract the contents of the PST file... just create a new output directory, and run the readpst command.

mkdir out
readpst -r c815601.pst - out

If all went well, then you will have a hierarchy of files and folders in the out directory. The hierarchy will look something like this:

out/folder 1/mbox
out/folder 1/sub folder 1a/mbox
out/folder 1/sub folder 1b/mbox
out/folder 2/mbox
... etc.

So each folder contains a single filed called mbox, which contains all of that folder's email in a standard mbox format. Of course, each folder can also contain sub-folders.

Now, the thing to note here, is that Mozilla Thunderbird also uses the mbox format. So, now our data is in the right format, but not the right structure.... for Mozilla Thunderbird to make use of these mbox files, they need to be re-organised into a structure like this:

out/folder 1
out/folder 1.sbd/sub folder 1a
out/folder 1.sbd/sub folder 1b
out/folder 2
... etc.

Specifically:

  • all mbox files have to be renamed to their parent folder's name and moved up into thier parent folder.
  • but to prevent naming comflicts (ie a file and folder both with the same name) all of the folders are given the .sbd extension (which I assume is a contraction for sub-directory).

That's how Thunderbird stores your email within your local profile folder.

So, how do we rearrange the readpst output into Thunderbird's... well, I'm glad you asked ;)

First, we need to rename all of the sub-directories to include the .sbd extension.

find out -type d | tac | grep -v '^out$' | xargs -d '\n' -I{} mv {} {}.sbd</div>

That was easy :) Now, we rename the mbox files, and move then to their parents' folders.

find out -name mbox -type f | xargs -d '\n' -I{} echo '"{}" "{}"' | sed -e 's/\.sbd\/mbox"$/"/' | xargs -L 1 mv

Okay, so that was a little bit harder ;) And finally, we can remove any now-empty sub-directories.

find out -empty -type d | xargs -d '\n' rmdir

So that's it! Our folder hierachy now matches that used by Thunderbird. All that remains is to close Thunderbird, copy the folder hiearachy into the profile directory, and re-start Thunderbird.

You can check out http://kb.mozillazine.org/Profile_folder_-_Thunderbird for more information on where you profile directory is, but for typical Windows users, you can just copy the folders into: C:\Documents and Settings\[username]\Application Data\Thunderbird\Profiles\[random].default\Mail\local.

I hope that helps! :)