Sample code for 30+ languages & platforms
PowerBuilder Requires Chilkat v11.0.0+

IMAP Copy Email from Selected Folder to Another Folder

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

Chilkat PowerBuilder Downloads

PowerBuilder
integer li_rc
integer li_Success
oleobject loo_Imap
integer li_FetchUids
string ls_Criteria
oleobject loo_MessageSet

li_Success = 0

//  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.
loo_Imap = create oleobject
li_rc = loo_Imap.ConnectToNewObject("Chilkat.Imap")
if li_rc < 0 then
    destroy loo_Imap
    MessageBox("Error","Connecting to COM object failed")
    return
end if

//  Turn on session logging for debugging.
loo_Imap.KeepSessionLog = 1

//  Connect using TLS.
loo_Imap.Ssl = 1
loo_Imap.Port = 993
li_Success = loo_Imap.Connect("imap.example.com")
if li_Success = 0 then
    Write-Debug loo_Imap.LastErrorText
    destroy loo_Imap
    return
end if

//  Authenticate
li_Success = loo_Imap.Login("email_account_login","email_account_password")
if li_Success = 0 then
    Write-Debug loo_Imap.LastErrorText
    destroy loo_Imap
    return
end if

//  Select an IMAP mailbox
li_Success = loo_Imap.SelectMailbox("Inbox")
if li_Success = 0 then
    Write-Debug loo_Imap.LastErrorText
    destroy loo_Imap
    return
end if

//  Search for messages having "Test email" in the subject.
li_FetchUids = 1
ls_Criteria = "SUBJECT ~"Test email~""
loo_MessageSet = create oleobject
li_rc = loo_MessageSet.ConnectToNewObject("Chilkat.MessageSet")

li_Success = loo_Imap.QueryMbx(ls_Criteria,li_FetchUids,loo_MessageSet)
if li_Success = 0 then
    Write-Debug loo_Imap.LastErrorText
    destroy loo_Imap
    destroy loo_MessageSet
    return
end if

//  Assuming we have 1 or more messages in the set, copy the 1st one to the folder "Inbox.testFolder"
if loo_MessageSet.Count > 0 then
    li_Success = loo_Imap.Copy(loo_MessageSet.GetId(0),loo_MessageSet.HasUids,"Inbox/testFolder")
    if li_Success <> 1 then
        Write-Debug loo_Imap.LastErrorText
    end if

end if

Write-Debug loo_Imap.SessionLog

Write-Debug "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


destroy loo_Imap
destroy loo_MessageSet