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

时间:2012-05-22 07:18:44

标签: imap

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

2 个答案:

答案 0 :(得分:1)

我不确定'PHP电子邮件迁移'是什么意思,因为我没有看到PHP如何适应这个等式。

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

答案 1 :(得分:1)

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

  1. 创建一个新的Imap帐户,并将其命名为Source。 [确保你选择 IMAP作为协议而不是POP]
  2. 以可以连接到当前源Imap的方式对其进行配置 服务器并取决于该帐户中的电子邮件量 和你的网络速度,可能需要一段时间来同步所有电子邮件。
  3. 同步完成后,为目标服务器创建一个新帐户, 名字吧,比如说Target并将其配置为IMAP。
  4. 目标帐户显然是空的,现在只需复制所有文件夹 从Source帐户到Target帐户。
  5. Thunderbird会处理所有复制过程,也会上传 所有邮件都自动邮寄到新服务器(作为默认行为 对于IMAP帐户) 完成后,您将在两台服务器上完全克隆您的电子邮件帐户。
  6. 或者如果您必须在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. 每个文件夹
    5. $ mBox = $ imapServer-> selectMailbox($ folderName);

    6. 查找所有消息

      $ msgsList = $ imapServer-> getMessagesList();

    7. 获取rawmessage。

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

    8. 连接目标服务器

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

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

      imap_append($ ImapStream,$ folderName,$ fullRawMail,“\ Seen”);