Visual FoxPro
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
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