![]() |
Chilkat HOME Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi DLL Go Java Node.js Objective-C PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(PureBasic) Search IMAP Mailbox for Email Matching CriteriaSearching an IMAP mailbox for messages that match search criteria. Note: This example requires Chilkat v11.0.0 or greater.
IncludeFile "CkImap.pb" IncludeFile "CkEmailBundle.pb" IncludeFile "CkMessageSet.pb" IncludeFile "CkEmail.pb" Procedure ChilkatExample() success.i = 0 ; This example requires the Chilkat API to have been previously unlocked. ; See Global Unlock Sample for sample code. imap.i = CkImap::ckCreate() If imap.i = 0 Debug "Failed to create object." ProcedureReturn EndIf ; Connect to an IMAP server. ; Use TLS CkImap::setCkSsl(imap, 1) CkImap::setCkPort(imap, 993) success = CkImap::ckConnect(imap,"imap.someMailServer.com") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn EndIf ; Login success = CkImap::ckLogin(imap,"myLogin","myPassword") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn EndIf ; Select an IMAP mailbox success = CkImap::ckSelectMailbox(imap,"Inbox") If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) ProcedureReturn EndIf ; We can choose to fetch UIDs or sequence numbers. fetchUids.i = 1 ; Here are examples of different search criteria: ; Return all messages. allMsgs.s = "ALL" ; Search for already-answered emails. answered.s = "ANSWERED" ; Search for messages on a specific date. ; The date string is DD-Month-YYYY where Month is ; Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, or Dec. onDate.s = "SENTON 05-Mar-2007" ; Search for messages between two dates. SENTBEFORE ; finds emails sent before a date, and SENTSINCE finds ; email sent on or after a date. The "AND" operation ; is implied by joining criteria, separated by spaces. betweenDates.s = "SENTSINCE 01-Mar-2007 SENTBEFORE 05-Mar-2007" ; Another example of AND: find all unanswered emails ; sent after 04-Mar-2007 with "Problem" in the subject: complexSearch1.s = "UNANSWERED SENTSINCE 04-Mar-2007 Subject " + Chr(34) + "Problem" + Chr(34) ; Find messages with a specific string in the body: bodySearch.s = "BODY " + Chr(34) + "problem solved" + Chr(34) ; Using OR. The syntax is OR <criteria1> <criteria2>. ; The "OR" comes first, followed by each criteria. ; For example, to match all emails with "Help" or "Question" in the subject. ; You'll notice that literal strings may be quoted or unquoted. ; If a literal contains SPACE characters, quote it: orSearch.s = "OR SUBJECT Help SUBJECT Question" ; ---------------------------------------------- ; Strings are case-insensitive when searching.... ; ---------------------------------------------- ; Find all emails sent from yahoo.com addresses: fromSearch.s = "FROM yahoo.com" ; Find all emails sent from anyone with "John" in their name: johnSearch.s = "FROM John" ; Find emails with the RECENT flag set: recentSearch.s = "RECENT" ; Find emails that don't have the recent flag set: notRecentSearch.s = "NOT RECENT" ; This is synonymous with "OLD": oldSearch.s = "OLD" ; Find all emails marked for deletion: markedForDeleteSearch.s = "DELETED" ; Find all emails having a specified header field with a value ; containing a substring: headerSearch.s = "HEADER DomainKey-Signature paypal.com" ; Find any emails having a specific header field. If the ; 2nd argument to the "HEADER" criteria is an empty string, ; any email having the header field is returned regardless ; of the header field's content. ; Find any emails with a DomainKey-Signature field: headerExistsSearch.s = "HEADER DomainKey-Signature " + Chr(34) + Chr(34) ; Find NEW emails: these are emails that have the RECENT flag ; set, but not the SEEN flag: newSearch.s = "NEW" ; Find emails larger than a certain number of bytes: sizeLargerSearch.s = "LARGER 500000" ; Find emails marked as seen or not already seen: seenSearch.s = "SEEN" notSeenSearch.s = "NOT SEEN" ; Find emails having a given substring in the TO header field: toSearch.s = "TO support@chilkatsoft.com" ; A more long-winded way to do the same thing: toSearch2.s = "HEADER TO support@chilkatsoft.com" ; Find emails smaller than a size in bytes: smallerSearch.s = "SMALLER 30000" ; Find emails that have a substring anywhere in the header ; or body: fullSubstringSearch.s = "TEXT " + Chr(34) + "Zip Component" + Chr(34) ; Pass any of the above strings here to test a search: messageSet.i = CkMessageSet::ckCreate() If messageSet.i = 0 Debug "Failed to create object." ProcedureReturn EndIf success = CkImap::ckQueryMbx(imap,orSearch,fetchUids,messageSet) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkMessageSet::ckDispose(messageSet) ProcedureReturn EndIf ; Fetch the email headers into a bundle object: bundle.i = CkEmailBundle::ckCreate() If bundle.i = 0 Debug "Failed to create object." ProcedureReturn EndIf headersOnly.i = 1 success = CkImap::ckFetchMsgSet(imap,headersOnly,messageSet,bundle) If success = 0 Debug CkImap::ckLastErrorText(imap) CkImap::ckDispose(imap) CkMessageSet::ckDispose(messageSet) CkEmailBundle::ckDispose(bundle) ProcedureReturn EndIf ; Display the Subject and From of each email. email.i = CkEmail::ckCreate() If email.i = 0 Debug "Failed to create object." ProcedureReturn EndIf i.i = 0 While i < CkEmailBundle::ckMessageCount(bundle) CkEmailBundle::ckEmailAt(bundle,i,email) Debug CkEmail::ckGetHeaderField(email,"Date") Debug CkEmail::ckSubject(email) Debug CkEmail::ckFrom(email) Debug "--" i = i + 1 Wend ; Disconnect from the IMAP server. success = CkImap::ckDisconnect(imap) CkImap::ckDispose(imap) CkMessageSet::ckDispose(messageSet) CkEmailBundle::ckDispose(bundle) CkEmail::ckDispose(email) ProcedureReturn EndProcedure |
© 2000-2025 Chilkat Software, Inc. All Rights Reserved.