Sample code for 30+ languages & platforms
DataFlex

Fetch Full Email Given Email Header

When you fetch email headers using UIDs instead of sequence numbers, the email object (which includes only the header) will have auto-generated ckx-imap-* headers. These headers provide details like the UID and attachments. The IMAP UID is found in the ckx-imap-uid header. Additionally, the ckx-imap-isUid header indicates whether the email header was downloaded by UID, showing YES or NO. Since sequence numbers can change if emails are deleted, UIDs are essential for downloading the correct full email.

The Chilkat Email object offers a GetImapUid method to retrieve the UID from the ckx-imap-uid header. This UID can be used to fetch the full email.

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoImap
    Variant vEmailHeader
    Handle hoEmailHeader
    Variant vEmailFull
    Handle hoEmailFull
    Integer iUid
    Boolean iIsUid
    Integer iUidFromCkxHeader
    String sTemp1

    Move False To iSuccess

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

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

    // 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 "***" "***" 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

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

    Move 2014 To iUid
    Move True To iIsUid

    // Fetch only the email header
    Get pvComObject of hoEmailHeader to vEmailHeader
    Get ComFetchEmail Of hoImap True iUid iIsUid vEmailHeader To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Now fetch the full email
    Get ComGetImapUid Of hoEmailHeader To iUidFromCkxHeader
    If (iUidFromCkxHeader < 0) Begin
        // Failed. 
        Showln "No ckx-imap-uid header was found."
        Procedure_Return
    End

    Get pvComObject of hoEmailFull to vEmailFull
    Get ComFetchEmail Of hoImap False iUid iIsUid vEmailFull To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // OK, we have the full email, do whatever we want...

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


End_Procedure