使用 IMAP - PHP 电子邮件迁移传输完整的数据(子文件夹)



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

我不确定你所说的"PHP 电子邮件迁移"是什么意思,因为我不明白 PHP 如何适应这个等式。

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

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

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

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

您也可以使用PHP_Imap库,但如果您可以控制服务器,我建议您使用 PEAR 的Net_IMAP库,该库在 php statdard IMAP 库中缺少一些功能。

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

    $imapServer = 新Net_IMAP($emailHost, 143(;$loggedIn = $imapServer->login($loginName , $password(;if($loggedIn == true({ 代码转到此处}

  3. 查找所有文件夹

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

  4. 对于每个文件夹

    $mBox = $imapServer->选择邮箱($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"(;

最新更新