Parses the winmail.dat (TNEF attachment).
[Visual Basic 6.0] Public Function ParseTNEF( _ data As Variant, _ IncludeRTFBody As Boolean ) As Variant
[Visual C++] public: HRESULT ParseTNEF( VARIANT data, VARIANT_BOOL IncludeRTFBody, VARIANT* pVal );
Parameters
Return Value
Example
[Visual Basic 6.0, Visual C++] The following example demonstrates how to deal with the winmail.dat attachment. To get the full samples of EAGetMail, please refer to Samples section.
[Visual Basic 6.0] Private Sub ParseTNEF() On Error GoTo ErrorHandle Dim oMail As New EAGetMailObjLib.Mail Dim oTools As New EAGetMailObjLib.Tools oMail.LicenseCode = "TryIt" oMail.LoadFile "c:\test.eml", False Dim tempFolder As String tempFolder = "c:\temp" Dim i, Count Dim atts atts = oMail.Attachments i = LBound(atts) Count = UBound(atts) If (Count >= i) Then If Not oTools.ExistFile(tempFolder) Then oTools.CreateFolder (tempFolder) End If For i = LBound(atts) To Count Dim att As Attachment Set att = atts(i) 'this attachment is in OUTLOOK RTF format, decode it here. If LCase(att.Name) = "winmail.dat" Then Dim tatts tatts = oMail.ParseTNEF(att.Content, True) For x = LBound(tatts) To UBound(tatts) Dim tatt As Attachment Set tatt = tatts(x) Dim tattname As String tattname = tempFolder & "\" & tatt.Name tatt.SaveAs tattname, True Next Else Dim attname attname = tempFolder & "\" & att.Name att.SaveAs attname, True End If Next End If Exit Sub ErrorHandle: MsgBox Err.Description End Sub
[Visual C++] //if you do not use MFC, please add this line to support CString type. #include <atlstr.h> #include "eagetmailobj.tlh" using namespace EAGetMailObjLib; void ParseTNEF() { IMailPtr oMail = NULL; CString tempFolder = _T("c:\\temp"); try { oMail.CreateInstance(__uuidof(EAGetMailObjLib::Mail)); oMail->LicenseCode = _T("TryIt"); oMail->LoadFile(_T("c:\\test.eml"), VARIANT_FALSE); LONG UBound = 0, LBound = 0; _variant_t atts = oMail->Attachments; SAFEARRAY *psa = atts.parray; SafeArrayGetLBound(psa, 1, &LBound); SafeArrayGetUBound(psa, 1, &UBound); INT count = UBound-LBound+1; ::CreateDirectory(tempFolder.GetString(), NULL); for(long i = LBound; i <= UBound; i++) { _variant_t vtAtt; SafeArrayGetElement(psa, &i, &vtAtt); IAttachmentPtr pAtt; vtAtt.pdispVal->QueryInterface(__uuidof(IAttachment), (void**)&pAtt); CString name = (TCHAR*)pAtt->Name; //this attachment is in OUTLOOK RTF format, decode it here. if(name.CompareNoCase(_T("winmail.dat")) == 0) { //this attachment is in OUTLOOK RTF format, decode it here. _variant_t tatts; try { tatts = oMail->ParseTNEF(pAtt->Content, VARIANT_TRUE); } catch(_com_error &ep) { MessageBox(NULL, (TCHAR*)ep.Description(), NULL, MB_OK); continue; } long XLBound = 0, XUBound = 0; SAFEARRAY* tpsa = tatts.parray; SafeArrayGetLBound(tpsa, 1, &XLBound); SafeArrayGetUBound(tpsa, 1, &XUBound); for(long x = XLBound; x <= XUBound; x++) { _variant_t vttAtt; SafeArrayGetElement(tpsa, &x, &vttAtt); IAttachmentPtr ptAtt; vttAtt.pdispVal->QueryInterface(__uuidof(IAttachment), (void**)&ptAtt); CString tattname = tempFolder; tattname.Append(_T("\\")); tattname.Append((TCHAR*)ptAtt->Name); ptAtt->SaveAs(tattname.GetString(), VARIANT_TRUE); } continue; } CString attname = tempFolder; attname.Append(_T("\\")); attname.Append((TCHAR*)pAtt->Name); pAtt->SaveAs(attname.GetString(), VARIANT_TRUE); } } catch(_com_error &ep) { MessageBox(NULL, (TCHAR*)ep.Description(), _T("Error"), MB_OK); } }
Remarks
See Also