Sample code for 30+ languages & platforms
DataFlex

Fetch a Range of POP3 Messages

See more POP3 Examples

Demonstrates the Chilkat MailMan.FetchRange method, which retrieves a range of messages from the POP3 mailbox and appends them to an EmailBundle. The arguments are keepOnServer, headersOnly, numBodyLines, a zero-based inclusive startIndex and endIndex, and the EmailBundle. This example fetches the first five messages.

Background: Fetching a range instead of everything is useful for paging through a large mailbox, or resuming after an interruption — download messages 0–99, then 100–199, and so on. Combined with headersOnly, it lets you build a quick message-list view without pulling full bodies and attachments up front.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

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

    Move False To iSuccess

    //  Demonstrates the MailMan.FetchRange method, which retrieves a range of messages from the
    //  POP3 mailbox and appends them to an EmailBundle.  The arguments are keepOnServer,
    //  headersOnly, numBodyLines, startIndex, endIndex, and the EmailBundle.  The indexes are
    //  zero-based and inclusive.

    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"

    //  Fetch the first 5 messages (indexes 0 through 4), full bodies, leaving them on the server.
    //  keepOnServer=True, 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 hoBundle to vBundle
    Get ComFetchRange Of hoMailman True False 0 0 4 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