PHP ActiveX
PHP ActiveX
Copy Email from one IMAP Account to Another
See more IMAP Examples
Demonstrates how to copy the email in a mailbox from one account to another.Chilkat PHP ActiveX Downloads
<?php
$success = 0;
$imapSrc = new COM("Chilkat.Imap");
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// Connect to our source IMAP server.
$imapSrc->Ssl = 1;
$imapSrc->Port = 993;
$success = $imapSrc->Connect('MY-IMAP-DOMAIN');
if ($success != 1) {
print $imapSrc->LastErrorText . "\n";
exit;
}
// Login to the source IMAP server
$success = $imapSrc->Login('MY-IMAP-LOGIN','MY-IMAP-PASSWORD');
if ($success != 1) {
print $imapSrc->LastErrorText . "\n";
exit;
}
$imapDest = new COM("Chilkat.Imap");
// Connect to our destination IMAP server.
$imapDest->Ssl = 1;
$imapDest->Port = 993;
$success = $imapDest->Connect('MY-IMAP-DOMAIN2');
if ($success != 1) {
print $imapDest->LastErrorText . "\n";
exit;
}
// Login to the destination IMAP server
$success = $imapDest->Login('MY-IMAP-LOGIN2','MY-IMAP-PASSWORD2');
if ($success != 1) {
print $imapDest->LastErrorText . "\n";
exit;
}
// Select a source IMAP mailbox on the source IMAP server
$success = $imapSrc->SelectMailbox('Inbox');
if ($success != 1) {
print $imapSrc->LastErrorText . "\n";
exit;
}
$fetchUids = 1;
// Get the set of UIDs for all emails on the source server.
// mset is a Chilkat.MessageSet
$mset = $imapSrc->Search('ALL',$fetchUids);
if ($imapSrc->LastMethodSuccess != 1) {
print $imapSrc->LastErrorText . "\n";
exit;
}
// Load the complete set of UIDs that were previously copied.
// We dont' want to copy any of these to the destination.
$fac = new COM("Chilkat.FileAccess");
$msetAlreadyCopied = new COM("Chilkat.MessageSet");
$strMsgSet = $fac->readEntireTextFile('qa_cache/saAlreadyLoaded.txt','utf-8');
if ($fac->LastMethodSuccess == 1) {
$msetAlreadyCopied->FromCompactString($strMsgSet);
}
$numUids = $mset->Count;
$sbFlags = new COM("Chilkat.StringBuilder");
$i = 0;
while ($i < $numUids) {
// If this UID was not already copied...
$uid = $mset->GetId($i);
if (!$msetAlreadyCopied->ContainsId($uid)) {
print 'copying ' . $uid . '...' . "\n";
// Get the flags.
$flags = $imapSrc->fetchFlags($uid,1);
if ($imapSrc->LastMethodSuccess == 0) {
print $imapSrc->LastErrorText . "\n";
exit;
}
$sbFlags->SetString($flags);
// Get the MIME of this email from the source.
$mimeStr = $imapSrc->fetchSingleAsMime($uid,1);
if ($imapSrc->LastMethodSuccess == 0) {
print $imapSrc->LastErrorText . "\n";
exit;
}
$seen = $sbFlags->Contains('\\Seen',0);
$flagged = $sbFlags->Contains('\\Flagged',0);
$answered = $sbFlags->Contains('\\Answered',0);
$draft = $sbFlags->Contains('\\Draft',0);
$success = $imapDest->AppendMimeWithFlags('Inbox',$mimeStr,$seen,$flagged,$answered,$draft);
if ($success != 1) {
print $imapDest->LastErrorText . "\n";
exit;
}
// Update msetAlreadyCopied with the uid just copied.
$msetAlreadyCopied->InsertId($uid);
// Save at every iteration just in case there's a failure..
$strMsgSet = $msetAlreadyCopied->toCompactString();
$fac->WriteEntireTextFile('qa_cache/saAlreadyLoaded.txt',$strMsgSet,'utf-8',0);
}
$i = $i + 1;
}
// Disconnect from the IMAP servers.
$success = $imapSrc->Disconnect();
$success = $imapDest->Disconnect();
?>