views:

553

answers:

2

I am using c# to write an Outlook 2007 add-in to store emails in a SQL Server 2005 database. I would like to be able to store the entire .msg file in a varbinary(MAX) field. Is there a way to do this without having to use the Outlook MailItem's SaveAs() method to save to a temp file and then read the file back in? I will need to transfer a large number of emails to the database and would prefer to avoid costly disk reads and writes.

+1  A: 

If you are looking to actually store it as a .msg format file, without trying to re-write this yourself, I would say that you are looking at going the route you mentioned.

Personally I would go to storing bits and pieces of the email, but that depends on exactly what you are going to do with it. Storing a MSG file in an DB in my opinion isn't really anything of value. now your use case might prove otherwise.

Mitchel Sellers
I am pulling out the important bits and pieces to store as metadata. However, I want to be able to display the email back in Outlook. I am basically designing a replacement for public folders.
Skywalker
Oh, given that, you might just be out of luck. Sadly I cannot seem to find a way to do that operation in-memory.
Mitchel Sellers
Perhaps there is a way to create a virtual directory so the `MailItem` thinks it is saving itself to the disk while it is actually being loading into memory?
Skywalker
At that point, the overhead of simple file operations are most likely not going to be any worse than something to try and get that...
Mitchel Sellers
A: 

Possibly.

Depending on your setup, you can avoid Outlook and just use Exchange/SQL Server.

Linked server to Exchange.

I've never tried it so YMMV

gbn
I don't really have access to the Exchange server and I am going to want the users to push only certain emails into the database
Skywalker