Sample code for 30+ languages & platforms
Visual FoxPro

Download and Save Email Attachments (POP3)

See more POP3 Examples

Downloads emails from a POP3 mailbox and saves all attachments.

Chilkat Visual FoxPro Downloads

Visual FoxPro
LOCAL lnSuccess
LOCAL loMailman
LOCAL loBundle
LOCAL lnKeepOnServer
LOCAL lnHeadersOnly
LOCAL lnNumBodyLines
LOCAL lcDirPath
LOCAL loEmail
LOCAL lnBundleIndex
LOCAL lnNumMessages
LOCAL lnNumAttachments
LOCAL lnAttachIndex

lnSuccess = 0

* 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.
loMailman = CreateObject('Chilkat.MailMan')

* Set the POP3 server's hostname
loMailman.MailHost = "pop.yourserver.com"

* Set the POP3 login/password.
loMailman.PopUsername = "***"
loMailman.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..
loBundle = CreateObject('Chilkat.EmailBundle')
lnKeepOnServer = 1
lnHeadersOnly = 0
* Irrelevent because we are NOT downloading headers-only
lnNumBodyLines = 0
lnSuccess = loMailman.FetchAll(lnKeepOnServer,lnHeadersOnly,lnNumBodyLines,loBundle)
IF (lnSuccess = 0) THEN
    ? loMailman.LastErrorText
    RELEASE loMailman
    RELEASE loBundle
    CANCEL
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..
lcDirPath = "c:/myAttachments"

loEmail = CreateObject('Chilkat.Email')
lnBundleIndex = 0
lnNumMessages = loBundle.MessageCount

DO WHILE (lnBundleIndex < lnNumMessages)
    loBundle.EmailAt(lnBundleIndex,loEmail)

    * Save all attachments to the specified directory.
    * The directory is automatically created if it does not yet exist.
    lnSuccess = loEmail.SaveAllAttachments(lcDirPath)
    IF (lnSuccess = 0) THEN
        ? loEmail.LastErrorText
        RELEASE loMailman
        RELEASE loBundle
        RELEASE loEmail
        CANCEL
    ENDIF

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

    * Setting OverwriteExisting = 0 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...
    loEmail.OverwriteExisting = 0
    lnSuccess = loEmail.SaveAllAttachments(lcDirPath)
    IF (lnSuccess = 0) THEN
        ? loEmail.LastErrorText
        RELEASE loMailman
        RELEASE loBundle
        RELEASE loEmail
        CANCEL
    ENDIF

    lnNumAttachments = loEmail.NumAttachments
    lnAttachIndex = 0
    DO WHILE (lnAttachIndex < lnNumAttachments)
        * If the attachment filename was changed to prevent overwriting,
        * GetAttachmentFilename will return the new filename.
        ? loEmail.GetAttachmentFilename(lnAttachIndex)
        lnAttachIndex = lnAttachIndex + 1
    ENDDO

    * Attachments can also be saved individually.
    lnAttachIndex = 0
    DO WHILE (lnAttachIndex < lnNumAttachments)

        ? "Original Filename: " + loEmail.GetAttachmentFilename(lnAttachIndex)
        lnSuccess = loEmail.SaveAttachedFile(lnAttachIndex,lcDirPath)
        IF (lnSuccess = 0) THEN
            ? loEmail.LastErrorText
            RELEASE loMailman
            RELEASE loBundle
            RELEASE loEmail
            CANCEL
        ENDIF

        * If OverwriteExisting = 1, 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.
        ? "Saved Filename: " + loEmail.GetAttachmentFilename(lnAttachIndex)
        lnAttachIndex = lnAttachIndex + 1
    ENDDO

    lnBundleIndex = lnBundleIndex + 1
ENDDO

RELEASE loMailman
RELEASE loBundle
RELEASE loEmail