Sample code for 30+ languages & platforms
AutoIt Requires Chilkat v11.0.0+

Download and Save Email Attachments (POP3)

See more POP3 Examples

Downloads emails from a POP3 mailbox and saves all attachments.

Chilkat AutoIt Downloads

AutoIt
Local $bSuccess = False

;  This example assumes the Chilkat API to have been previously unlocked.
;  See Global Unlock Sample for sample code.

;  The mailman object is used for receiving (POP3) 
;  and sending (SMTP) email.
$oMailman = ObjCreate("Chilkat.MailMan")

;  Set the POP3 server's hostname
$oMailman.MailHost = "pop.yourserver.com"

;  Set the POP3 login/password.
$oMailman.PopUsername = "***"
$oMailman.PopPassword = "***"

;  Copy the all email from the user's POP3 mailbox 
;  into a bundle object.  The email remains on the server.
;  FetchAll is a reasonable choice for POP3 maildrops that don't have too many
;  emails. For larger mail drops, one might download emails one at a time..
$oBundle = ObjCreate("Chilkat.EmailBundle")
Local $bKeepOnServer = True
Local $bHeadersOnly = False
;  Irrelevent because we are NOT downloading headers-only
Local $iNumBodyLines = 0
$bSuccess = $oMailman.FetchAll($bKeepOnServer,$bHeadersOnly,$iNumBodyLines,$oBundle)
If ($bSuccess = False) Then
    ConsoleWrite($oMailman.LastErrorText & @CRLF)
    Exit
EndIf

;  The directory path can be relative or absolute.
;  This shows a Windows style directory path.  On other operating systems, the path
;  would be different..
Local $sDirPath = "c:/myAttachments"

$oEmail = ObjCreate("Chilkat.Email")
Local $iBundleIndex = 0
Local $iNumMessages = $oBundle.MessageCount

While ($iBundleIndex < $iNumMessages)
    $oBundle.EmailAt($iBundleIndex,$oEmail)

    ;  Save all attachments to the specified directory.
    ;  The directory is automatically created if it does not yet exist.
    $bSuccess = $oEmail.SaveAllAttachments($sDirPath)
    If ($bSuccess = False) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Exit
    EndIf

    ;  The OverwriteExisting property controls whether already-existing files
    ;  are automatically overwritten.  By default, it is set to True so that existing
    ;  files will be overwritten.

    ;  Setting OverwriteExisting = False will cause the attachment-saving methods to generate
    ;  unique filenames if a file with the same name already exists.  The actual filename(s)
    ;  saved will be present by calling GetAttachmentFilename for each attachment *after*
    ;  saving.
    ;  For example...
    $oEmail.OverwriteExisting = False
    $bSuccess = $oEmail.SaveAllAttachments($sDirPath)
    If ($bSuccess = False) Then
        ConsoleWrite($oEmail.LastErrorText & @CRLF)
        Exit
    EndIf

Local $iNumAttachments = $oEmail.NumAttachments
Local $iAttachIndex = 0
    While ($iAttachIndex < $iNumAttachments)
        ;  If the attachment filename was changed to prevent overwriting,
        ;  GetAttachmentFilename will return the new filename.
        ConsoleWrite($oEmail.GetAttachmentFilename($iAttachIndex) & @CRLF)
        $iAttachIndex = $iAttachIndex + 1
    Wend

    ;  Attachments can also be saved individually.
    $iAttachIndex = 0
    While ($iAttachIndex < $iNumAttachments)

        ConsoleWrite("Original Filename: " & $oEmail.GetAttachmentFilename($iAttachIndex) & @CRLF)
        $bSuccess = $oEmail.SaveAttachedFile($iAttachIndex,$sDirPath)
        If ($bSuccess = False) Then
            ConsoleWrite($oEmail.LastErrorText & @CRLF)
            Exit
        EndIf

        ;  If OverwriteExisting = True, the saved filename will always equal the original filename,
        ;  unless there are characters present in the filename that are not allowed by Windows,
        ;  such as * ? < > | etc.  In those cases the illegal characters are either removed or replaced
        ;  with underscore characters to allow the file to be saved.
        ConsoleWrite("Saved Filename: " & $oEmail.GetAttachmentFilename($iAttachIndex) & @CRLF)
        $iAttachIndex = $iAttachIndex + 1
    Wend

    $iBundleIndex = $iBundleIndex + 1
Wend