Lua Requires Chilkat v11.0.0+
Lua
Download and Save Email Attachments (POP3)
See more POP3 Examples
Downloads emails from a POP3 mailbox and saves all attachments.Chilkat Lua Downloads
local chilkat = require("chilkat")
-- 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.
local mailman = chilkat.MailMan.new()
-- Set the POP3 server's hostname
mailman.mail_host = "pop.yourserver.com"
-- Set the POP3 login/password.
mailman.pop_username = "***"
mailman.pop_password = "***"
-- 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..
local bundle = chilkat.EmailBundle.new()
local keepOnServer = true
local headersOnly = false
-- Irrelevent because we are NOT downloading headers-only
local numBodyLines = 0
local success = mailman:fetch_all(keepOnServer, headersOnly, numBodyLines, bundle)
if not success then
print(mailman.last_error_text)
return
end
-- 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 dirPath = "c:/myAttachments"
local email = chilkat.Email.new()
local bundleIndex = 0
local numMessages = bundle.message_count
while bundleIndex < numMessages do
bundle:email_at(bundleIndex, email)
-- Save all attachments to the specified directory.
-- The directory is automatically created if it does not yet exist.
success = email:save_all_attachments(dirPath)
if not success then
print(email.last_error_text)
return
end
-- 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...
email.overwrite_existing = false
success = email:save_all_attachments(dirPath)
if not success then
print(email.last_error_text)
return
end
local numAttachments = email.num_attachments
local attachIndex = 0
while attachIndex < numAttachments do
-- If the attachment filename was changed to prevent overwriting,
-- GetAttachmentFilename will return the new filename.
print(email:get_attachment_filename(attachIndex))
attachIndex = attachIndex + 1
end
-- Attachments can also be saved individually.
attachIndex = 0
while attachIndex < numAttachments do
print("Original Filename: " .. email:get_attachment_filename(attachIndex))
success = email:save_attached_file(attachIndex, dirPath)
if not success then
print(email.last_error_text)
return
end
-- 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.
print("Saved Filename: " .. email:get_attachment_filename(attachIndex))
attachIndex = attachIndex + 1
end
bundleIndex = bundleIndex + 1
end