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

Mark IMAP Email as Read/Unread (Seen/Unseen)

Demonstrates how to mark emails as read or unread.

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

-- Set PeekMode so that downloaded messages are not
-- automatically marked as seen.
imap.peek_mode = true

-- The NumMessages property contains the number of messages
-- in the currently selected mailbox.
local numMsgs = imap.num_messages
if numMsgs == 0 then
    return
end

local email = chilkat.Email.new()
for i = 1, numMsgs do
    -- Download each email by sequence number (not UID)
    success = imap:fetch_email(false, i, false, email)
    if not success then
        print(imap.last_error_text)
        return
    end

    -- If desired, mark the email as SEEN.  There are two
    -- ways to do it:

    -- 1) Set the flag directly by using the sequence number
    -- Indicate that we are passing a sequence number and
    -- not a UID:
    local bIsUid = false
    -- Set the SEEN flag = 1 to mark the email as SEEN,
    -- or set it to 0 to mark it as not-seen.
    success = imap:set_flag(i, bIsUid, "SEEN", 1)
    if not success then
        print(imap.last_error_text)
        return
    end

    -- 2) Alternatively, we can use the email object.
    -- When an email is downloaded from the IMAP server
    -- Chilkat will add a "ckx-imap-uid" header to the email.
    -- This makes it possible to know the UID associated with
    -- the email.  (This is not the sequence number, which may change
    -- from session to session, but the UID which does not change.
    -- The SetMailFlag method is identical to SetFlag, except
    -- it gets the UID from the ckx-imap-uid header.
    -- For example:
    success = imap:set_mail_flag(email, "SEEN", 1)
    if not success then
        print(imap.last_error_text)
        return
    end
end

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