DataFlex
DataFlex
Read IMAP Email Headers
This example demonstrates how to connect to an IMAP server and download only the email headers for all messages in a mailbox. Downloading headers only is much faster and more efficient than downloading complete emails because the message bodies and attachment contents are not retrieved.
The example shows how to:
- Connect to an IMAP server using SSL/TLS
- Authenticate and select a mailbox
- Query for all messages in the mailbox
- Fetch header-only email information
- Display sender, subject, recipients, and total message size
- Retrieve attachment metadata such as filenames and sizes without downloading the actual attachments
This technique is useful for quickly scanning large mailboxes, building message summaries, or inspecting attachment information while minimizing bandwidth and memory usage.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoImap
Boolean iFetchUids
Variant vMessageSet
Handle hoMessageSet
Variant vBundle
Handle hoBundle
Boolean iHeadersOnly
Variant vEmail
Handle hoEmail
String sName
String sAddr
Integer i
Integer j
Integer iNumAttach
Integer iAttachSize
String sTemp1
String sTemp2
Integer iTemp1
Move False To iSuccess
Move False To iSuccess
// This example assumes the Chilkat API has already been unlocked.
// See Global Unlock Sample for example code.
Get Create (RefClass(cComChilkatImap)) To hoImap
If (Not(IsComObjectCreated(hoImap))) Begin
Send CreateComObject of hoImap
End
// Connect to the IMAP server using SSL/TLS on the standard secure IMAP port.
Set ComSsl Of hoImap To True
Set ComPort Of hoImap To 993
Get ComConnect Of hoImap "imap.example.com" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Authenticate with the IMAP server.
Get ComLogin Of hoImap "****" "****" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Select the mailbox (folder) to access.
Get ComSelectMailbox Of hoImap "Inbox" To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Get the identifiers for all messages in the selected mailbox.
// Setting fetchUids = cktrue causes IMAP UIDs to be returned.
// If ckfalse, IMAP sequence numbers are returned instead.
Move True To iFetchUids
Get Create (RefClass(cComChilkatMessageSet)) To hoMessageSet
If (Not(IsComObjectCreated(hoMessageSet))) Begin
Send CreateComObject of hoMessageSet
End
Get pvComObject of hoMessageSet to vMessageSet
Get ComQueryMbx Of hoImap "ALL" iFetchUids vMessageSet To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Download only the email headers for the messages in the set.
// This is much faster than downloading full emails because the
// message bodies and attachment contents are not retrieved.
//
// Even though the attachments themselves are not downloaded,
// Chilkat can still provide information such as attachment
// filenames, attachment sizes, and the total message size.
Get Create (RefClass(cComChilkatEmailBundle)) To hoBundle
If (Not(IsComObjectCreated(hoBundle))) Begin
Send CreateComObject of hoBundle
End
Move True To iHeadersOnly
Get pvComObject of hoMessageSet to vMessageSet
Get pvComObject of hoBundle to vBundle
Get ComFetchMsgSet Of hoImap iHeadersOnly vMessageSet vBundle To iSuccess
If (iSuccess = False) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Iterate over each email in the bundle and display summary information.
Get Create (RefClass(cComChilkatEmail)) To hoEmail
If (Not(IsComObjectCreated(hoEmail))) Begin
Send CreateComObject of hoEmail
End
Move 0 To i
Move 0 To j
While (i < (ComMessageCount(hoBundle)))
Get pvComObject of hoEmail to vEmail
Get ComEmailAt Of hoBundle i vEmail To iSuccess
// Display the sender and subject line.
Get ComFrom Of hoEmail To sTemp1
Showln sTemp1
Get ComSubject Of hoEmail To sTemp1
Showln sTemp1
// Display all "To" recipients.
Move 0 To j
While (j < (ComNumTo(hoEmail)))
Get ComGetToName Of hoEmail j To sTemp1
Get ComGetToAddr Of hoEmail j To sTemp2
Showln "TO: " sTemp1 ", " sTemp2
Move (j + 1) To j
Loop
// Display all "CC" recipients.
Move 0 To j
While (j < (ComNumCC(hoEmail)))
Get ComGetCcName Of hoEmail j To sTemp1
Get ComGetCcAddr Of hoEmail j To sTemp2
Showln "CC: " sTemp1 ", " sTemp2
Move (j + 1) To j
Loop
// Display the total size of the email message, including
// the body and all attachments, even though only headers
// were downloaded.
Get ComSize Of hoEmail To iTemp1
Showln iTemp1
// When full emails are downloaded, attachment information
// is accessed using the email.NumAttachments property and
// the email.GetMailAttach* methods.
//
// However, because this example downloaded headers only,
// attachment metadata must be obtained using the IMAP object.
Get pvComObject of hoEmail to vEmail
Get ComGetMailNumAttach Of hoImap vEmail To iNumAttach
Move 0 To j
While (j < iNumAttach)
// Display the attachment filename.
Get ComGetMailAttachFilename Of hoImap Get pvComObject of hoEmail to vEmail
vEmail j To sTemp1
Showln sTemp1
// Display the attachment size in bytes.
Get pvComObject of hoEmail to vEmail
Get ComGetMailAttachSize Of hoImap vEmail j To iAttachSize
Showln " size = " iAttachSize " bytes"
Move (j + 1) To j
Loop
Showln "--"
Move (i + 1) To i
Loop
// Disconnect from the IMAP server.
Get ComDisconnect Of hoImap To iSuccess
End_Procedure