Sample code for 30+ languages & platforms
Xojo Plugin

Fetch Single Email by UID or Sequence Number

Assuming the UID is known, download a single email by UID from an IMAP mail server.

Chilkat Xojo Plugin Downloads

Xojo Plugin
Dim success As Boolean
success = False

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

Dim imap As New Chilkat.Imap

// Connect to an IMAP server.
// Use TLS
imap.Ssl = True
imap.Port = 993
success = imap.Connect("imap.example.com")
If (success = False) Then
    System.DebugLog(imap.LastErrorText)
    Return
End If

// Login
success = imap.Login("***","***")
If (success = False) Then
    System.DebugLog(imap.LastErrorText)
    Return
End If

// Select an IMAP mailbox
success = imap.SelectMailbox("Inbox")
If (success = False) Then
    System.DebugLog(imap.LastErrorText)
    Return
End If

Dim email As New Chilkat.Email

Dim uid As Int32
uid = 2014
Dim isUid As Boolean
isUid = True

success = imap.FetchEmail(False,uid,isUid,email)
If (success = False) Then
    System.DebugLog(imap.LastErrorText)
    Return
End If

// Display the From and Subject
System.DebugLog(email.FromAddress)
System.DebugLog(email.Subject)

// Display the Body property, which is the default body.
// If an email has an HTML body, the Body property contains
// the HTML source.  Otherwise it contains the plain-text
// body.
System.DebugLog("---- EMAIL BODY ----")
System.DebugLog(email.Body)
System.DebugLog("--------------------")

// Display the recipients:
Dim j As Int32
For j = 0 To email.NumTo - 1
    System.DebugLog(email.GetToName(j) + ", " + email.GetToAddr(j))
Next
For j = 0 To email.NumCC - 1
    System.DebugLog(email.GetCcName(j) + ", " + email.GetCcAddr(j))
Next

// Show the total size of the email, including body and attachments:
System.DebugLog(Str(email.Size))

// When a full email is downloaded, we would use the
// email.NumAttachments property in conjunction with the
// email.GetMailAttach* methods.
// However, when an email object contains only the header,
// we need to access the attachment info differently:
Dim numAttach As Int32
numAttach = imap.GetMailNumAttach(email)
System.DebugLog(Str(numAttach))

For j = 0 To numAttach - 1
    System.DebugLog(imap.GetMailAttachFilename(email,j))
    Dim attachSize As Int32
    attachSize = imap.GetMailAttachSize(email,j)
    System.DebugLog("    size = " + Str(attachSize) + " bytes")
Next

System.DebugLog("--")

// Disconnect from the IMAP server.
success = imap.Disconnect()