Sample code for 30+ languages & platforms
Lua Requires Chilkat v11.0.0+

Process New Email by Scanning for Senders

Scan email and save application-selected emails to EML files with unique filenames.

Chilkat Lua Downloads

Lua
local chilkat = require("chilkat")

-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.

local imap = chilkat.Imap.new()

-- Connect to an IMAP server.
-- Use TLS
imap.ssl = true
imap.port = 993
local success = imap:connect("imap.example.com")
if not success then
    print(imap.last_error_text)
    return
end

-- Login
success = imap:login("myLogin", "myPassword")
if not success then
    print(imap.last_error_text)
    return
end

-- Select an IMAP mailbox
success = imap:select_mailbox("Inbox")
if not success then
    print(imap.last_error_text)
    return
end

-- We can choose to fetch UIDs or sequence numbers.
local fetchUids = true

-- Fetch messages from the mailbox using a search criteria.
-- This example finds NEW emails: these are emails that have the RECENT flag set, but not the SEEN flag:
local messageSet = chilkat.MessageSet.new()
success = imap:query_mbx("NEW", fetchUids, messageSet)
if not success then
    print(imap.last_error_text)
    return
end

-- This example will download headers, and then download
-- the full email for those emails sent from a contact
-- in our database.

-- When downloading headers, each email object contains
-- (obviously) the headers, but the body will be missing.
-- Also, attachments will not be included.  However, it is
-- possible to get information about the attachments
-- as well as the complete size of the email.
local bundle = chilkat.EmailBundle.new()
local headersOnly = true
success = imap:fetch_msg_set(headersOnly, messageSet, bundle)
if not success then
    print(imap.last_error_text)
    return
end

-- Loop over the email objects...
local emailHeader = chilkat.Email.new()
local fullEmail = chilkat.Email.new()
local i = 0
local numEmails = bundle.message_count
while i < numEmails do
    bundle:email_at(i, emailHeader)

    -- The sender's email address and name are available
    -- in the From, FromAddress, and FromName properties.
    -- If the sender is "Chilkat Support <support@chilkatsoft.com",
    -- then the From property will hold the entire string.
    -- the FromName property contains"Chilkat Support",
    -- and the FromAddress property contains "support@chilkatsoft.com";
    print(emailHeader.from)
    print(emailHeader.from_address)
    print(emailHeader.from_name)

    -- Assume at this point your code checks to see if the sender
    -- is one in your contacts database.  If so, this is
    -- the code you would write to download the entire
    -- email and save it to a file.

    -- The ckx-imap-uid header field is added when
    -- headers are downloaded.  This makes it possible
    -- to get the UID from the email object.
    local uidStr = emailHeader:get_header_field("ckx-imap-uid")
    local uid = tonumber(uidStr)

    success = imap:fetch_email(false, uid, true, fullEmail)
    if not success then
        print(imap.last_error_text)
        return
    end

    -- You can use the GenerateFilename method to
    -- generate a unique filename...
    local filename = fullEmail:generate_filename()

    -- SaveEml saves the entire email, including attachments.
    success = fullEmail:save_eml(filename)

    print("--")

    i = i + 1
end

-- Disconnect from the IMAP server.
success = imap:disconnect()