Sample code for 30+ languages & platforms
PowerBuilder

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