DataFlex
DataFlex
IMAP Get List of Flags
See more IMAP Examples
When a mailbox is selected, the server response includes a list of flags:The FLAGS response occurs as a result of a SELECT or EXAMINE command. The flag parenthesized list identifies the flags (at a minimum, the system-defined flags) that are applicable for this mailbox. Flags other than the system flags can also exist, depending on server implementation.This example demonstrates how to capture the SELECT (or EXAMINE) response, and parse the list of flags.
Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoImap
String sSelectResponse
Handle hoSbResponse
Variant vSbFlagList
Handle hoSbFlagList
Integer iNumReplaced
Handle hoFlagsTable
Integer i
String sTemp1
Move False To iSuccess
Get Create (RefClass(cComChilkatImap)) To hoImap
If (Not(IsComObjectCreated(hoImap))) Begin
Send CreateComObject of hoImap
End
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Connect to an IMAP server.
// Use TLS
Set ComSsl Of hoImap To True
Set ComPort Of hoImap To 993
Get ComConnect Of hoImap "MY-IMAP-DOMAIN" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Login
Get ComLogin Of hoImap "MY-IMAP-LOGIN" "MY-IMAP-PASSWORD" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// Select an IMAP mailbox
Get ComSelectMailbox Of hoImap "INBOX" To iSuccess
If (iSuccess <> True) Begin
Get ComLastErrorText Of hoImap To sTemp1
Showln sTemp1
Procedure_Return
End
// The LastResponse property contains the full response of the last command.
Get ComLastResponse Of hoImap To sSelectResponse
Showln sSelectResponse
// For example, on GMail, the SELECT response looks like this:
// * FLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $NotPhishing $Phishing $label1 $label2 $label3 $label4 $label5 Junk NonJunk)
// * OK [PERMANENTFLAGS (\Answered \Flagged \Draft \Deleted \Seen $Forwarded $NotPhishing $Phishing $label1 $label2 $label3 $label4 $label5 Junk NonJunk \*)] Flags permitted.
// * OK [UIDVALIDITY 3] UIDs valid.
// * 46 EXISTS
// * 0 RECENT
// * OK [UIDNEXT 4147] Predicted next UID.
// * OK [HIGHESTMODSEQ 402971]
// aaac OK [READ-WRITE] INBOX selected. (Success)
// The goal of this example is to capture the list of FLAGS.
// All IMAP servers will respond with the list of flags in a SPACE separated list enclosed in parentheses.
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbResponse
If (Not(IsComObjectCreated(hoSbResponse))) Begin
Send CreateComObject of hoSbResponse
End
Get ComAppend Of hoSbResponse sSelectResponse To iSuccess
// Get just the list of flags:
Get Create (RefClass(cComChilkatStringBuilder)) To hoSbFlagList
If (Not(IsComObjectCreated(hoSbFlagList))) Begin
Send CreateComObject of hoSbFlagList
End
Get ComGetAfterBetween Of hoSbResponse "* FLAGS" "(" ")" To sTemp1
Get ComAppend Of hoSbFlagList sTemp1 To iSuccess
Get ComGetAsString Of hoSbFlagList To sTemp1
Showln sTemp1
// sbFlagList contains this:
//
// \Answered \Flagged \Draft \Deleted \Seen $Forwarded $NotPhishing $Phishing $label1 $label2 $label3 $label4 $label5 Junk NonJunk
//
// Make sure no more than one SPACE char in a row exists.
Get ComTrimInsideSpaces Of hoSbFlagList To iSuccess
// Modify sbFlagList to one flag per line
Get ComReplace Of hoSbFlagList " " (character(13)) + (character(10)) To iNumReplaced
// Load a StringTable with the flag names.
Get Create (RefClass(cComChilkatStringTable)) To hoFlagsTable
If (Not(IsComObjectCreated(hoFlagsTable))) Begin
Send CreateComObject of hoFlagsTable
End
Get pvComObject of hoSbFlagList to vSbFlagList
Get ComAppendFromSb Of hoFlagsTable vSbFlagList To iSuccess
// Iterate over the individual flag names:
Move 0 To i
While (i < (ComCount(hoFlagsTable)))
Get ComStringAt Of hoFlagsTable i To sTemp1
Showln i ": " sTemp1
Move (i + 1) To i
Loop
// The output is:
//
// 0: \Answered
// 1: \Flagged
// 2: \Draft
// 3: \Deleted
// 4: \Seen
// 5: $Forwarded
// 6: $NotPhishing
// 7: $Phishing
// 8: $label1
// 9: $label2
// 10: $label3
// 11: $label4
// 12: $label5
// 13: Junk
// 14: NonJunk
//
End_Procedure