0

我想将全部数据(所有子文件夹)从一个 imap 服务器传输到另一个,而不会丢失任何数据。

4

2 回答 2

1

正如 vpetersson 所提到的,它不太适合 PHP 部分,因为使用任何 imap 客户端软件也可以轻松地将电子邮件从一个 Imap 迁移到另一个 Imap 服务器,例如,Microsoft Outlook、Mozilla Thunderbird、Apple Mail 客户端和很快。你怎么能做到这一点很简单。如果您需要迁移的电子邮件帐户数量有限,这里是 Mozilla Thunderbird 的示例工作流程,您也可以在任何其他客户端上遵循相同的流程。

  1. 创建一个新的 Imap 帐户,并将其命名为 Source。[确保选择 IMAP 作为协议而不是 POP]
  2. 以可以连接到当前源 Imap 服务器的方式对其进行配置,并且根据该帐户中的电子邮件量和网络速度,同步所有电子邮件可能需要一段时间。
  3. 同步完成后,为目标服务器创建一个新帐户,将其命名为 Target,并将其配置为 IMAP。
  4. 目标帐户显然是空的,现在只需将所有文件夹从源帐户复制到目标帐户。
  5. Thunderbird 将处理所有的复制过程,并且它会自动将所有邮件上传到新服务器(作为 IMAP 帐户的默认行为)一旦完成,您将在两台服务器上完整克隆您的电子邮件帐户。

或者,如果您必须在 PHP 中执行此操作,可能是因为您有数百个电子邮件帐户并且使用上述方法不实用,请按照以下步骤操作。

你也可以使用 PHP_Imap 库,但如果你可以控制你的服务器,我会推荐使用 PEAR 的 Net_IMAP 库,它在 php statdard IMAP 库中缺少一些功能。

  1. 为所有帐户和每个帐户编写一个 for 循环
  2. 连接到服务器

    $imapServer = new Net_IMAP($emailHost, 143); $loggedIn = $imapServer->login($loginName , $password); if($loggedIn == true){ //代码放在这里 }

  3. 查找所有文件夹

    $mBoxes = $imapServer->getMailboxes('', 0, true);

  4. 对于每个文件夹

    $mBox = $imapServer->selectMailbox($folderName);

  5. 查找所有消息

    $msgsList = $imapServer->getMessagesList();

  6. 获取原始消息。

    foreach($msgUid){ $fullRawMail = $imapServer->getMessages($msgUid,false); }

  7. 连接到目标服务器

  8. 检查目标服务器是否与源服务器具有相同的文件夹,如果没有则创建一个文件夹

  9. 将原始消息上传到目标服务器 [特定文件夹]。你可以使用 php 的 imap_append 函数。

    imap_append($ImapStream, $folderName, $fullRawMail , "\Seen");

于 2014-07-05T10:58:46.003 回答
1

我不确定您所说的“PHP 电子邮件迁移”是什么意思,因为我不明白 PHP 如何融入这个等式。

也就是说,有一些 MAP 迁移工具可以完成您所描述的内容。我是一个名为YippieMove的产品的联合创始人,它可以做到这一点,但也有其他开源替代品,比如imapsync。如果您花一些时间在 Google 上,您会发现更多选择。

于 2012-10-09T21:14:45.600 回答