Sample code for 30+ languages & platforms
AutoIt

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