Hi,
For a project at the Vrije Universiteit Amsterdam I
thought I would use your software. With a friend of mine
I made some changes to archive.php (attached) and
libimap.php (below). We tested it and it works for
exchange 2000 as source and cyrus imap as
destination. It is even possible to use it in bulk migration
if you run it from the command line. But, alas, we are
not going to use it in real life as a colleague of mine
recommended me to use imapsync 1.133
(http://www.linux-france.org/prj/imapsync/dist/).
However, I didn't want to withhold you some of the
advances we made...
Sincerely,
Jochem Markestijn (jochem.markestijn@gmail.com)
<?php
function error () {
global $src_username;
//die ("Error: user \"" .
$src_username . "\": " . imap_last_error ());
print ("Error: user \"" .
$src_username . "\": " . imap_last_error () . "\n");
}
function warning () {
global $src_username;
print ("Error-- warning: user \"" .
$src_username . "\": " . imap_last_error () . "\n");
}
function getmailboxes ($conn, $server) {
global $src_username;
$mailboxes = imap_getmailboxes ($in,
$src_server, "*");
if (!is_array ($mailboxes)) {
error ();
}
return $mailboxes;
}
function createmailbox($conn, $server, $mailbox) {
global $src_username;
if (imap_createmailbox($conn,
imap_utf7_encode("{".
$server . "}" . $mailbox))) {
if (!@imap_status($conn,
"{". $server . "}" .
$mailbox, SA_ALL)) {
return false;
}
return true;
}
return false;
}
function folderExists($conn, $server, $mailbox) {
$folders = imap_listmailbox($conn, "{" .
$server . "}", $mailbox);
return (!empty ($folders));
}
function deletemsg ($conn, $msg_no) {
if (!imap_delete ($conn, $msg_no)) {
warning ();
return false;
}
return true;
}
function deletemsgs($mbox, $first_msg_no,
$last_msg_no) {
if (!imap_delete
($mbox, "$first_msg_no:$last_msg_no")) {
warning ();
return false;
}
return true;
}
function expunge ($conn) {
imap_expunge ($conn);
}
function getMailBoxStatus ($conn, $server, $mailbox) {
return (@imap_status($conn,"{" .
$server . "}" . $mailbox,SA_ALL));
}
function isFlagSet($mbox, $msg_no, $flag) {
$headerinfo = imap_headerinfo($mbox, $msg_no);
switch ($flag) {
case "Seen":
$result = ($headerinfo->Unseen == 'U' || $headerinfo-
>Recent == 'N') ? false : true;
break;
case "Answered":
$result = ($headerinfo->Answered == 'A') ? true :
false;
break;
case "Flagged":
$result = ($headerinfo->Flagged == 'F') ? true : false;
break;
case "Deleted":
$result = ($headerinfo->Deleted == 'D') ? true : false;
break;
case "Draft";
$result = ($headerinfo->Draft == 'X') ? true : false;
break;
default:
if ($debug) print "ERROR - Flag specified no defined
in isFlagSet() function!";
$result = false;
}
return $result;
}
function setFlag($mbox, $msg_no, $flag) {
return (imap_setflag_full($mbox, $msg_no,
$flag));
}
function setDestFlagsToSrcFlags($dest_mbox,
$src_mbox, $msg_no) {
if (isFlagSet($src_mbox, $msg_no, "Seen")) {
setFlag($dest_mbox, $msg_no, "\\Seen");
}
if (isFlagSet($src_mbox, $msg_no, "Answered")) {
setFlag($dest_mbox, $msg_no, "\\Answered");
}
if (isFlagSet($src_mbox, $msg_no, "Deleted")) {
setFlag($dest_mbox, $msg_no, "\\Deleted");
}
if (isFlagSet($src_mbox, $msg_no, "Draft")) {
setFlag($dest_mbox, $msg_no, "\\Draft");
}
}
?>
archive.php - changed