Attachment Object


Provides properties and methods for presenting an e-mail attachment.

IDispatch
    IAttachment

[Visual Basic 6.0]
Public Class Attachment
[Visual C++]
public: interface IAttachment

Thread Safety

Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.

Public Properties

Content Gets the Content (binary data) of the embedded attachment.
ContentID Gets the Content-ID of the embedded attachment.
ContentType Gets the Content-Type of the attachment.
EncodedContent Gets the enconded content (raw data) of the attachment.
Headers Gets the HeaderCollection for headers of the e-mail message.
Name Gets the name of the attachment.

Public Methods

SaveAs Saves the attachment to a local file.

Remarks

It is not recommended to construct Attachment object instance directly. To get attachments of email, please use Mail.Attachments property, this property returns an array for Attachment object instances.

Example

[Visual Basic 6.0, VBScript, Visual C++] To get the full samples of EAGetMail, please refer to Samples section.

[Visual Basic 6.0]
Private Sub ParseAttachment()
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
 
 
[VBScript]
Sub ParseAttachment()
    Dim oMail 
    Set oMail = CreateObject("EAGetMailObj.Mail")
    Dim oTools
    Set oTools = CreateObject("EAGetMailObj.Tools")
    
    oMail.LicenseCode = "TryIt"
    oMail.LoadFile "c:\test.eml", False
    Dim tempFolder
    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
            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
                        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
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 ParseAttachment()
{
    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 );
    }
 
}