PureBasic
PureBasic
Examine Junk/NonJunk Flags on Outlook.com and GMail
See more IMAP Examples
Examines the Junk and NonJunk FLAGS for IMAP on Outlook.com and GMail.com.Chilkat PureBasic Downloads
IncludeFile "CkImap.pb"
Procedure ChilkatExample()
success.i = 0
imap.i = CkImap::ckCreate()
If imap.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; This example requires the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
; Connect to the outlook.com IMAP server.
; We'll do the same for GMail below..
; Use TLS
CkImap::setCkSsl(imap, 1)
CkImap::setCkPort(imap, 993)
success = CkImap::ckConnect(imap,"imap-mail.outlook.com")
If success <> 1
Debug CkImap::ckLastErrorText(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndIf
; Login
success = CkImap::ckLogin(imap,"myAccount@outlook.com","OUTLOOK_PASSWORD")
If success <> 1
Debug CkImap::ckLastErrorText(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndIf
; Begin keeping a log of the session here.
CkImap::setCkKeepSessionLog(imap, 1)
; Select an IMAP mailbox
success = CkImap::ckSelectMailbox(imap,"Inbox")
If success <> 1
Debug CkImap::ckLastErrorText(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndIf
; The LastResponse property contains the full response of the last command.
; The response to the SELECT mailbox command shows the FLAGS that can be set
; for emails in the mailbox.
selectResponse.s = CkImap::ckLastResponse(imap)
Debug selectResponse
; The response to "SELECT Inbox" looks like this:
; There are no FLAGS for Junk/NonJunk..
; * 4 EXISTS
; * 0 RECENT
; * FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
; * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags
; * OK [UIDVALIDITY 14] UIDVALIDITY value
; * OK [UIDNEXT 1719] The next unique identifier value
; aaac OK [READ-WRITE] SELECT completed.
; Fetch the flags for each message in the mailbox.
; Prior to running this example, (using Mozilla Thunderbird) I marked one of the emails
; in my outlook.com Inbox as Junk.
sequenceNum.i = 1
While sequenceNum <= CkImap::ckNumMessages(imap)
flags.s = CkImap::ckFetchFlags(imap,sequenceNum,0)
Debug Str(sequenceNum) + ": " + flags
sequenceNum = sequenceNum + 1
Wend
; The output of the above loop is this:
; 1: \Seen
; 2: \Seen
; 3: \Seen
; 4: \Seen
; As you can see, nothing is marked as Junk/Spam. This concurs with the list of FLAGS
; documented in the response to the SELECT command. Apparently, there is no flag for junk/nonjunk
; for outlook.com. Mozilla Thunderbird must be storing additional information about particular
; emails locally. (In other words, perhaps the Junk/NonJunk flag is information stored locally
; by Thunderbird, and is not a flag set on the server.)
Debug "---- Session Log ----"
Debug CkImap::ckSessionLog(imap)
; The session log looks like this:
; ----IMAP REQUEST----
; aaac SELECT "Inbox"
; ----IMAP RESPONSE----
; * 4 EXISTS
; * 0 RECENT
; * FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
; * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags
; * OK [UIDVALIDITY 14] UIDVALIDITY value
; * OK [UIDNEXT 1719] The next unique identifier value
; aaac OK [READ-WRITE] SELECT completed.
; ----IMAP REQUEST----
; aaad FETCH 1 (FLAGS)
; ----IMAP RESPONSE----
; * 1 FETCH (FLAGS (\Seen))
; aaad OK FETCH completed.
; ----IMAP REQUEST----
; aaae FETCH 2 (FLAGS)
; ----IMAP RESPONSE----
; * 2 FETCH (FLAGS (\Seen))
; aaae OK FETCH completed.
; ----IMAP REQUEST----
; aaaf FETCH 3 (FLAGS)
; ----IMAP RESPONSE----
; * 3 FETCH (FLAGS (\Seen))
; aaaf OK FETCH completed.
; ----IMAP REQUEST----
; aaag FETCH 4 (FLAGS)
; ----IMAP RESPONSE----
; * 4 FETCH (FLAGS (\Seen))
; aaag OK FETCH completed.
CkImap::ckDisconnect(imap)
; --------------------------------------------------------------------------------
; Now let's check GMail..
; Again, I've marked one email as Junk.
CkImap::setCkKeepSessionLog(imap, 0)
CkImap::setCkSsl(imap, 1)
CkImap::setCkPort(imap, 993)
success = CkImap::ckConnect(imap,"imap.gmail.com")
If success <> 1
Debug CkImap::ckLastErrorText(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndIf
; Login
success = CkImap::ckLogin(imap,"myAccount@gmail.com","GMAIL-IMAP-PASSWORD")
If success <> 1
Debug CkImap::ckLastErrorText(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndIf
CkImap::setCkKeepSessionLog(imap, 1)
success = CkImap::ckSelectMailbox(imap,"Inbox")
If success <> 1
Debug CkImap::ckLastErrorText(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndIf
selectResponse = CkImap::ckLastResponse(imap)
Debug selectResponse
; The response to GMail "SELECT Inbox" 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 403404]
; aaai OK [READ-WRITE] Inbox selected. (Success)
sequenceNum = CkImap::ckNumMessages(imap)
minSeqNum.i = 1
If sequenceNum > 10
minSeqNum = sequenceNum - 10
EndIf
While sequenceNum >= minSeqNum
flags.s = CkImap::ckFetchFlags(imap,sequenceNum,0)
Debug Str(sequenceNum) + ": " + flags
sequenceNum = sequenceNum - 1
Wend
; The output (for GMail) of the above loop is this:
; 46: Junk \Seen
; 45: NonJunk \Answered \Seen
; 44: NonJunk \Seen
; 43: \Answered \Seen
; 42: \Answered \Seen
; 41: NonJunk \Seen
; 40: NonJunk \Answered \Seen
; 39: NonJunk \Seen
; 38: NonJunk \Seen
; 37: NonJunk \Seen
; 36: NonJunk \Seen
; As you can see, the email I marked as "Junk" using Mozilla Thunderbird has the Junk flag set.
; This concurs with GMail's list of FLAGS. Apparently, since the IMAP server has a "Junk" flag,
; Thunderbird set it when I marked the email as Junk.
CkImap::ckDisconnect(imap)
CkImap::ckDispose(imap)
ProcedureReturn
EndProcedure