We are hosting several mail solution, among them a Hosted Exchange 2007 platform. Some of our customers would like to migrate from one of our other platforms (which stores emails in eml files), and we'd like to be able to migrate mail (which means tons of eml files) for a given user into an exchange mailbox. Since this is large-volume it would be incredible cumbersome to do this via Outlook per user.

Does anyone know anything about any software or api that would allow us to (bulk) import emls into an exchange mailbox?


Here's a sub-optimal solution that I used in the past. It's somewhat unhelpful today because Microsoft removed the API / interface that worked "back then", but you might find some success with it today using a "scratch server" to get the email from "EML" format into, say, PST format with "EXMERGE":

Exchange 2000 / 2003 exposed the Exchange Information Store, optionally, as a file system (the "M: drive"). In Exchange 2000, this was actually exposed as a drive letter on the server, but in Exchange 2003 it was hidden by default (but you could go through a procedure to expose it again -- http://support.microsoft.com/kb/821836). Each mailbox was exposed as a filesystem folder with ".EML" files in each folder representing the emails.

I used this interface to import email from "Yahoo Mail" for several Customers who were migrating to in-house Exchange Server installations, since I could get the messages from Yahoo as a large pile of ".EML" files in folders in a ZIP file. I would unzip the files from Yahoo into a subfolder of the user's "Inbox" folder on the "M: drive" and the messages would become available in their Exchange mailbox.

In your case, I'd probably install an Exchange 2003 installation in a scratch Active Directory on some VM's or test machines, perform the import there, then export the mailboxes with ExMerge as PST files and import them into the production Exchange 2007 installation.

It's a bit outdated, but it's the quickest way I can think to do what you want to do w/o writing any scripts or using a heavily manual procedure, etc.

  • Excellent suggestion! +1 for lifesaver :-) we'll be able to script something around this. – Trondh Oct 13 '09 at 15:06

Here's a method I've used in the past:

Set up an IIS SMTP server and configure it to use your Exchange server as a smart host. Configure your Exchange server to allow relaying from the IIS SMTP server. Drop the eml files into the SMTP pickup directory on the IIS SMTP server. The IIS SMTP server will then take all of those eml files and forward them to the Exchange server (since Exchange is acting as a smarthost for the IIS SMTP server). The Exchange server will then happily deliver them to your internal recipients.

  • The sent/received dates on messages will get all screwed up with this solution, which will not make users happy, and make auditors/lawyers REALLY unhappy if there are any compliance or legal discovery issues. – rmalayter Sep 21 '10 at 15:17
  • Yes, but it will work. You didn't specifiy that maintaining the sent\received dates was important. This is a "bulk" method that accomplishes the stated goal. Hopefully Evan's solution is more amenable to your needs. – joeqwerty Sep 21 '10 at 23:04

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.