Sample code for 30+ languages & platforms
DataFlex

IMAP Download All Email One at a Time

Demonstrates how to download every email in an IMAP mailbox one at a time as a MIME string or as an email object. (The MIME contains the full contents of the email including all attachments.)

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoImap
    Boolean iBUid
    String sMimeStr
    Integer i
    Integer n
    Variant vEmail
    Handle hoEmail
    String sTemp1

    Move False To iSuccess

    Get Create (RefClass(cComChilkatImap)) To hoImap
    If (Not(IsComObjectCreated(hoImap))) Begin
        Send CreateComObject of hoImap
    End

    // This example requires the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // Connect to an IMAP server.
    // Use TLS
    Set ComSsl Of hoImap To True
    Set ComPort Of hoImap To 993
    Get ComConnect Of hoImap "imap.example.com" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Login
    Get ComLogin Of hoImap "myLogin" "myPassword" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Select an IMAP mailbox
    Get ComSelectMailbox Of hoImap "Inbox" To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Once the mailbox is selected, the NumMessages property
    // will contain the number of messages in the mailbox.
    // You may loop from 1 to NumMessages to
    // fetch each message by sequence number.

    Move False To iBUid

    Get ComNumMessages Of hoImap To n
    For i From 1 To n

        // Download the email by sequence number.
        Get ComFetchSingleAsMime Of hoImap i iBUid To sMimeStr

        // ... your application may process each MIME string...
    Loop

    // An alternative is to download each email in the form of an
    // email object, like this:
    Get Create (RefClass(cComChilkatEmail)) To hoEmail
    If (Not(IsComObjectCreated(hoEmail))) Begin
        Send CreateComObject of hoEmail
    End
    For i From 1 To n

        // Download the email by sequence number.
        Get pvComObject of hoEmail to vEmail
        Get ComFetchEmail Of hoImap False i iBUid vEmail To iSuccess

        // ... your application may process the email object...

    Loop

    // Disconnect from the IMAP server.
    Get ComDisconnect Of hoImap To iSuccess


End_Procedure