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