Mail.Attachments Property


Gets an array of the attachments of the email message.

[Visual Basic 6.0]
Public Property Get Attachments() As Variant
[Visual C++]
public: get_Attachments(VARIANT* pVal);

Property Value

A Attachment array instance of of the attachments of the email message.

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 );
    }
 
}