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

How to Copy IMAP Mail to another IMAP Server

Demonstrates how to copy the entire contents of an IMAP mailbox to another IMAP server.

Chilkat PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

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

$imapSrc = New-Object Chilkat.Imap

#  Connect to our source IMAP server.
$success = $imapSrc.Connect("imap.example.com")
if ($success -eq $false) {
    $($imapSrc.LastErrorText)
    exit
}

#  Login to the source IMAP server
$success = $imapSrc.Login("admin@chilkatsoft.com","myPassword")
if ($success -eq $false) {
    $($imapSrc.LastErrorText)
    exit
}

$imapDest = New-Object Chilkat.Imap

#  Connect to our destination IMAP server.
$success = $imapDest.Connect("mail.example-code.com")
if ($success -eq $false) {
    $($imapDest.LastErrorText)
    exit
}

#  Login to the destination IMAP server
$success = $imapDest.Login("myLogin","myPassword")
if ($success -eq $false) {
    $($imapDest.LastErrorText)
    exit
}

#  Select an IMAP mailbox on the source IMAP server
$success = $imapSrc.SelectMailbox("Inbox")
if ($success -eq $false) {
    $($imapSrc.LastErrorText)
    exit
}

#  After selecting a mailbox, the NumMessages property will
#  be updated to reflect the total number of emails in the mailbox:
$($imapSrc.NumMessages)

#  The emails in the mailbox will always have sequence numbers
#  ranging from 1 to NumMessages.

#  This example will copy the first 10 messages using sequence numbers
$sbMime = New-Object Chilkat.StringBuilder

for ($seqNum = 1; $seqNum -le 10; $seqNum++) {
    $sbMime.Clear()
    $success = $imapSrc.FetchSingleAsMimeSb($seqNum,$false,$sbMime)
    if ($success -eq $false) {
        $($imapSrc.LastErrorText)
        exit
    }

    $success = $imapDest.AppendMimeWithFlagsSb("Inbox",$sbMime,$false,$false,$false,$false)
    if ($success -eq $false) {
        $($imapDest.LastErrorText)
        exit
    }

}

#  Disconnect from the IMAP servers.
$success = $imapSrc.Disconnect()
$success = $imapDest.Disconnect()