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("EAGetMailObj.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