Sample code for 30+ languages & platforms
DataFlex

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 DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoMailman
    Variant vUidls
    Handle hoUidls
    Variant vBundle
    Handle hoBundle
    Integer n
    Variant vEmail
    Handle hoEmail
    Integer i
    String sTemp1

    Move False To iSuccess

    //  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.

    Get Create (RefClass(cComChilkatMailMan)) To hoMailman
    If (Not(IsComObjectCreated(hoMailman))) Begin
        Send CreateComObject of hoMailman
    End

    //  Configure the POP3 server connection.
    Set ComMailHost Of hoMailman To "pop.example.com"
    Set ComMailPort Of hoMailman To 995
    Set ComPopSsl Of hoMailman To True
    Set ComPopUsername Of hoMailman To "user@example.com"
    Set ComPopPassword Of hoMailman To "myPassword"

    //  Build the set of UIDLs to fetch.
    Get Create (RefClass(cComChilkatStringTable)) To hoUidls
    If (Not(IsComObjectCreated(hoUidls))) Begin
        Send CreateComObject of hoUidls
    End
    Get ComAppend Of hoUidls "0000000123abcdef" To iSuccess
    Get ComAppend Of hoUidls "0000000124abcdef" To iSuccess

    //  Fetch the listed messages (full bodies) into a bundle.
    //  headersOnly=False (fetch the entire message).
    //  Note: numBodyLines only applies when headersOnly is True (it sets how many lines of the
    //  body to include along with the headers).  When headersOnly is False, the entire message
    //  is fetched and numBodyLines is ignored.
    Get Create (RefClass(cComChilkatEmailBundle)) To hoBundle
    If (Not(IsComObjectCreated(hoBundle))) Begin
        Send CreateComObject of hoBundle
    End

    Get pvComObject of hoUidls to vUidls
    Get pvComObject of hoBundle to vBundle
    Get ComFetchUidlSet Of hoMailman vUidls False 0 vBundle To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoMailman To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    Get ComMessageCount Of hoBundle To n
    Showln "Fetched " n " messages."

    Get Create (RefClass(cComChilkatEmail)) To hoEmail
    If (Not(IsComObjectCreated(hoEmail))) Begin
        Send CreateComObject of hoEmail
    End

    For i From 0 To (n - 1)
        Get pvComObject of hoEmail to vEmail
        Get ComEmailAt Of hoBundle i vEmail To iSuccess
        Get ComSubject Of hoEmail To sTemp1
        Showln sTemp1
    Loop

    //  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.


End_Procedure