Introduction
The MsgReader.dll is able to read a Outlook msg-file without having Microsoft Outlook installed. The library is able to read, e.g. Subject, message body (also compressed RTF), saving attachments (no msg attachments), ...
It can be used by everybody for non-commercial projects.
Background
To read the OLE-Storage, we used the Edanmo.OleStorage.dll. A lot of other code was derived, ported, ... from code snips we found on the internet.
Using the Code
The library was developed with C# and .NET 1.1. Just import it and build your application. It might contain some bugs because this is the first working version we "released". Tests was done with Microsoft Outlook 2003.
For more details, check out MsgReader.chm which contains the whole documentation.
The following code shows a small example of how to use the library:
Open the selected Outlook msg-file:
private void btnBrowse_Click(object sender, System.EventArgs e)
{
this.opnFile.ShowDialog();
this.txtBoxFile.Text = this.opnFile.FileName;
}
Read the To, From, Subject and mail body (plain text & RTF-formatted text) property from msg-file and display them:
private void btnShow_Click(object sender, System.EventArgs e)
{
if (this.txtBoxFile.Text != "")
{
string[] AttachList;
string Content = "";
string path = this.txtBoxFile.Text;
try
{
Msg storage = new Msg(path);
this.txtBoxTo.Text = storage.GetToProperty();
this.txtBoxFrom.Text = storage.GetFromProperty();
this.txtBoxSub.Text = storage.GetSubjectProperty();
this.txtBoxBody.Text = storage.GetBodyText();
storage.GetAttachmentList(out AttachList);
Content = storage.GetBodyRtfText();
this.RTFBox.TextRTF = addAttachmentsToRTF(Content, AttachList);
storage.Close();
}
catch
{
}
}
}
This function adds the Windows file type icons of the attachments and the attachments name to the RTF-Body. Only in case the attachments were originally "attached" to an RTF or HTML body, the icon will be displayed in the RTF-body because in case of plain-text mails, no attachments rendering position is defined!
private string addAttachmentsToRTF(string RTFBody, string[] attchList)
{
int lastIndex = 0;
WMETA8 wmeta8;
String dummy;
if (RTFBody.Length > 13)
{
for (int i=0; i<attchList.Length; i++)
{
lastIndex = RTFBody.IndexOf("\\objattph\\'20", lastIndex);
if (lastIndex > 0)
{
RTFBody = RTFBody.Remove(lastIndex, 13);
wmeta8 = new WMETA8(this.RTFBox.CreateGraphics());
dummy = attchList[i];
if (dummy.Length > 15)
{
dummy = "<" + dummy.Substring(0,13) + "..>";
}
else
{
dummy = " <" + dummy + ">";
}
RTFBody = RTFBody.Insert(lastIndex,
(wmeta8.getRTFIcon(attchList[i]) + "{\\fs16 " + dummy +"}"));
}
else break;
}
}
return RTFBody;
}
The complete Visual Studio project can be also downloaded (TestofMsgReaderDll.zip):
Points of Interest
More details, news, and updates regarding the MsgViewer-Application and the DLL can be found here.
History
- 12.7.2007 - Picture of the sample application added
- 17.7.2007 - Sorry for the delay - we had some trouble with the upload. Today I added the new DLL-Project (done with Visual Studio .NET 2003) and the full library documentation