C++/CLI ExampleWhen an Outlook user composes and sends a message using either Rich Text Format or HTML Format, Outlook automagically generates a file, winmail.dat, and attaches it to the end of the email. The winmail.dat contains the rich text body and original attachments. To parse winmail.dat (TNEF stream) file, we should use ParseTNEF method.
// The following example codes demonstrate parsing winmail.dat - TNEF stream
// To get full sample projects, please download and install EAGetMail on your machine.
// To run it correctly, please change email server, user, password, folder, file name value to yours
#include "stdafx.h"
using namespace System;
using namespace System::Text;
using namespace System::Collections;
using namespace System::IO;
// Add EAGetMail namespace
using namespace EAGetMail;
void ParseEmail(String ^emlFile)
{
Mail ^oMail = gcnew Mail("TryIt");
oMail->Load(emlFile, false);
// Parse Sender
Console::WriteLine("From: {0}", oMail->From->ToString());
// Parse Mail To
array<MailAddress^> ^addrs = oMail->To;
for (int i = 0; i < addrs->Length; i++)
{
Console::WriteLine("To: {0}", addrs[i]->ToString());
}
// Parse Mail CC
addrs = oMail->Cc;
for (int i = 0; i < addrs->Length; i++)
{
Console::WriteLine("To: {0}", addrs[i]->ToString());
}
// Parse Mail Subject
Console::WriteLine("Subject: {0}", oMail->Subject);
// Parse Mail Text/Plain body
Console::WriteLine("TextBody: {0}", oMail->TextBody);
// Parse Mail Html Body
Console::WriteLine("HtmlBody: {0}", oMail->HtmlBody );
//Parse Attachments
array<Attachment^> ^atts = oMail->Attachments;
for (int i = 0; i < atts->Length; i++)
{
Attachment ^att = atts[i];
// This attachment is in OUTLOOK RTF format(TNEF), decode it here.
if (String::Compare(att->Name, "winmail.dat") == 0)
{
array<Attachment^> ^tatts = nullptr;
try
{
tatts = Mail::ParseTNEF(att->Content, true);
}
catch (Exception ^ep)
{
Console::WriteLine(ep->Message);
continue;
}
int y = tatts->Length;
for (int x = 0; x < y; x++)
{
Attachment ^tatt = tattsā;
Console::WriteLine("winmail.dat: {0}", tatt->Name);
}
continue;
}
Console::WriteLine("Attachment: {0}", atts[i]->Name);
}
}
int main(array<System::String ^> ^args)
{
ParseEmail("c:\\my folder\\test.eml");
return 0;
}
Click here to read original topic - full version ... If you have any comments or questions about above example codes, please add your comments here.