Sample code for 30+ languages & platforms
PureBasic

Fetch a Set of POP3 Messages by UIDL

See more POP3 Examples

Demonstrates the Chilkat MailMan.FetchUidlSet method, which retrieves the messages whose UIDLs are listed in a StringTable and appends them to an EmailBundle. The arguments are the UIDL StringTable, headersOnly, numBodyLines, and the EmailBundle. This example fetches two specific messages by UIDL.

Background: This is the efficient way to download a selected subset of a mailbox in one call — exactly the pattern for an incremental client: list the mailbox UIDLs, compare against the ones you've already stored, and fetch only the new UIDLs as a set. It avoids re-downloading messages you already have while still pulling everything new in a single operation.

Chilkat PureBasic Downloads

PureBasic
IncludeFile "CkStringTable.pb"
IncludeFile "CkEmailBundle.pb"
IncludeFile "CkEmail.pb"
IncludeFile "CkMailMan.pb"

Procedure ChilkatExample()

    success.i = 0

    ;  Demonstrates the MailMan.FetchUidlSet method, which retrieves the messages whose UIDLs are
    ;  listed in a StringTable and appends them to an EmailBundle.  The arguments are the UIDL
    ;  StringTable, headersOnly, numBodyLines, and the EmailBundle.  The messages remain on the
    ;  server.

    mailman.i = CkMailMan::ckCreate()
    If mailman.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    ;  Configure the POP3 server connection.
    CkMailMan::setCkMailHost(mailman, "pop.example.com")
    CkMailMan::setCkMailPort(mailman, 995)
    CkMailMan::setCkPopSsl(mailman, 1)
    CkMailMan::setCkPopUsername(mailman, "user@example.com")
    CkMailMan::setCkPopPassword(mailman, "myPassword")

    ;  Build the set of UIDLs to fetch.
    uidls.i = CkStringTable::ckCreate()
    If uidls.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    CkStringTable::ckAppend(uidls,"0000000123abcdef")
    CkStringTable::ckAppend(uidls,"0000000124abcdef")

    ;  Fetch the listed messages (full bodies) into a bundle.
    ;  headersOnly=0 (fetch the entire message).
    ;  Note: numBodyLines only applies when headersOnly is 1 (it sets how many lines of the
    ;  body to include along with the headers).  When headersOnly is 0, the entire message
    ;  is fetched and numBodyLines is ignored.
    bundle.i = CkEmailBundle::ckCreate()
    If bundle.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    success = CkMailMan::ckFetchUidlSet(mailman,uidls,0,0,bundle)
    If success = 0
        Debug CkMailMan::ckLastErrorText(mailman)
        CkMailMan::ckDispose(mailman)
        CkStringTable::ckDispose(uidls)
        CkEmailBundle::ckDispose(bundle)
        ProcedureReturn
    EndIf

    n.i = CkEmailBundle::ckMessageCount(bundle)
    Debug "Fetched " + Str(n) + " messages."

    email.i = CkEmail::ckCreate()
    If email.i = 0
        Debug "Failed to create object."
        ProcedureReturn
    EndIf

    i.i
    For i = 0 To n - 1
        success = CkEmailBundle::ckEmailAt(bundle,i,email)
        Debug CkEmail::ckSubject(email)
    Next

    ;  Note: Explicitly connecting/authenticating is optional.  Chilkat MailMan automatically
    ;  connects and authenticates -- using the property settings above -- whenever a server
    ;  operation requires it.  Calling the explicit connect/authenticate methods can still be
    ;  helpful to determine whether a failure occurs while connecting or while authenticating.


    CkMailMan::ckDispose(mailman)
    CkStringTable::ckDispose(uidls)
    CkEmailBundle::ckDispose(bundle)
    CkEmail::ckDispose(email)


    ProcedureReturn
EndProcedure