PureBasic
PureBasic
Download and Save Email Attachments (POP3)
See more POP3 Examples
Downloads emails from a POP3 mailbox and saves all attachments.Chilkat PureBasic Downloads
IncludeFile "CkEmailBundle.pb"
IncludeFile "CkEmail.pb"
IncludeFile "CkMailMan.pb"
Procedure ChilkatExample()
success.i = 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.
mailman.i = CkMailMan::ckCreate()
If mailman.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Set the POP3 server's hostname
CkMailMan::setCkMailHost(mailman, "pop.yourserver.com")
; Set the POP3 login/password.
CkMailMan::setCkPopUsername(mailman, "***")
CkMailMan::setCkPopPassword(mailman, "***")
; 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..
bundle.i = CkEmailBundle::ckCreate()
If bundle.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
keepOnServer.i = 1
headersOnly.i = 0
; Irrelevent because we are NOT downloading headers-only
numBodyLines.i = 0
success = CkMailMan::ckFetchAll(mailman,keepOnServer,headersOnly,numBodyLines,bundle)
If success = 0
Debug CkMailMan::ckLastErrorText(mailman)
CkMailMan::ckDispose(mailman)
CkEmailBundle::ckDispose(bundle)
ProcedureReturn
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..
dirPath.s = "c:/myAttachments"
email.i = CkEmail::ckCreate()
If email.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
bundleIndex.i = 0
numMessages.i = CkEmailBundle::ckMessageCount(bundle)
While (bundleIndex < numMessages)
CkEmailBundle::ckEmailAt(bundle,bundleIndex,email)
; Save all attachments to the specified directory.
; The directory is automatically created if it does not yet exist.
success = CkEmail::ckSaveAllAttachments(email,dirPath)
If success = 0
Debug CkEmail::ckLastErrorText(email)
CkMailMan::ckDispose(mailman)
CkEmailBundle::ckDispose(bundle)
CkEmail::ckDispose(email)
ProcedureReturn
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...
CkEmail::setCkOverwriteExisting(email, 0)
success = CkEmail::ckSaveAllAttachments(email,dirPath)
If success = 0
Debug CkEmail::ckLastErrorText(email)
CkMailMan::ckDispose(mailman)
CkEmailBundle::ckDispose(bundle)
CkEmail::ckDispose(email)
ProcedureReturn
EndIf
numAttachments.i = CkEmail::ckNumAttachments(email)
attachIndex.i = 0
While (attachIndex < numAttachments)
; If the attachment filename was changed to prevent overwriting,
; GetAttachmentFilename will return the new filename.
Debug CkEmail::ckGetAttachmentFilename(email,attachIndex)
attachIndex = attachIndex + 1
Wend
; Attachments can also be saved individually.
attachIndex = 0
While (attachIndex < numAttachments)
Debug "Original Filename: " + CkEmail::ckGetAttachmentFilename(email,attachIndex)
success = CkEmail::ckSaveAttachedFile(email,attachIndex,dirPath)
If success = 0
Debug CkEmail::ckLastErrorText(email)
CkMailMan::ckDispose(mailman)
CkEmailBundle::ckDispose(bundle)
CkEmail::ckDispose(email)
ProcedureReturn
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.
Debug "Saved Filename: " + CkEmail::ckGetAttachmentFilename(email,attachIndex)
attachIndex = attachIndex + 1
Wend
bundleIndex = bundleIndex + 1
Wend
CkMailMan::ckDispose(mailman)
CkEmailBundle::ckDispose(bundle)
CkEmail::ckDispose(email)
ProcedureReturn
EndProcedure