Sample code for 30+ languages & platforms
DataFlex

IMAP Copy Email from Selected Folder to Another Folder

Copies an email from the selected mailbox (folder) to another mailbox (folder).

Chilkat DataFlex Downloads

DataFlex
Use ChilkatAx-win32.pkg

Procedure Test
    Boolean iSuccess
    Handle hoImap
    Boolean iFetchUids
    String sCriteria
    Variant vMessageSet
    Handle hoMessageSet
    String sTemp1
    Integer iTemp1
    Boolean bTemp1

    Move False To iSuccess

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

    // This example copies an email from one mailbox to another.
    Get Create (RefClass(cComChilkatImap)) To hoImap
    If (Not(IsComObjectCreated(hoImap))) Begin
        Send CreateComObject of hoImap
    End

    // Turn on session logging for debugging.
    Set ComKeepSessionLog Of hoImap To True

    // Connect using 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

    // Authenticate
    Get ComLogin Of hoImap "email_account_login" "email_account_password" 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

    // Search for messages having "Test email" in the subject.
    Move True To iFetchUids
    Move 'SUBJECT "Test email"' To sCriteria
    Get Create (RefClass(cComChilkatMessageSet)) To hoMessageSet
    If (Not(IsComObjectCreated(hoMessageSet))) Begin
        Send CreateComObject of hoMessageSet
    End
    Get pvComObject of hoMessageSet to vMessageSet
    Get ComQueryMbx Of hoImap sCriteria iFetchUids vMessageSet To iSuccess
    If (iSuccess = False) Begin
        Get ComLastErrorText Of hoImap To sTemp1
        Showln sTemp1
        Procedure_Return
    End

    // Assuming we have 1 or more messages in the set, copy the 1st one to the folder "Inbox.testFolder"
    Get ComCount Of hoMessageSet To iTemp1
    If (iTemp1 > 0) Begin
        Get ComGetId Of hoMessageSet 0 To iTemp1
        Get ComHasUids Of hoMessageSet To bTemp1
        Get ComCopy Of hoImap iTemp1 bTemp1 "Inbox/testFolder" To iSuccess
        If (iSuccess <> True) Begin
            Get ComLastErrorText Of hoImap To sTemp1
            Showln sTemp1
        End

    End

    Get ComSessionLog Of hoImap To sTemp1
    Showln sTemp1

    Showln "OK"

    // Sample sessiong log:

    // ----INFO----
    // Connecting to IMAP server at outlook.office365.com:993
    // ----IMAP RESPONSE----
    // * OK The Microsoft Exchange IMAP4 service is ready. [QgBMADAAUABSADAAMQAwADIAQwBBADAAMAA3ADAALgBwAHIAbwBkAC4AZQB4AGMAaABhAG4AZwBlAGwAYQBiAHMALgBjAG8AbQA=]
    // ----IMAP REQUEST----
    // aaab LOGIN "chilkat@live.com"
    // ----IMAP RESPONSE----
    // aaab OK LOGIN completed.
    // ----IMAP REQUEST----
    // aaac SELECT "Inbox"
    // ----IMAP RESPONSE----
    // * 28 EXISTS
    // * 0 RECENT
    // * FLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)
    // * OK [PERMANENTFLAGS (\Seen \Answered \Flagged \Deleted \Draft $MDNSent)] Permanent flags
    // * OK [UNSEEN 23] Is the first unseen message
    // * OK [UIDVALIDITY 14] UIDVALIDITY value
    // * OK [UIDNEXT 6416] The next unique identifier value
    // aaac OK [READ-WRITE] SELECT completed.
    // ----IMAP REQUEST----
    // aaad UID SEARCH SUBJECT "Test email"
    // ----IMAP RESPONSE----
    // * SEARCH 6414
    // aaad OK SEARCH completed.
    // ----IMAP REQUEST----
    // aaae UID COPY 6414 "Inbox/testFolder"
    // ----IMAP RESPONSE----
    // aaae OK [COPYUID 180 6414 1] COPY completed.
    // 
    // OK


End_Procedure