我们正在将大约 60 个用户邮箱从 Postfix/Dovecot/Maildir 设置迁移到 Exchange 2007。我知道微软的 Transporter Suite,这将允许批量将邮箱从 IMAP 转换为 Exchange。但是,如果出现不可预见的问题,人们担心如何清理失败的过程。显然,尝试为用户删除损坏的 Exchange 邮箱也会导致一个听起来相当可怕的对话框,暗示用户帐户也将被删除,而不仅仅是损坏的邮箱本身。虽然原始电子邮件存储(Maildir 格式)可用,但我们需要能够删除有问题的坏邮箱并重复该过程,因此这种方法不是一种可行的选择。
我现在非常担心,如果没有大量的人工干预,批量或大批量转换会受到影响。我们正试图避免访问 50 多个桌面,并使用 Outlook 或 Thunderbird 作为“枢纽”代理来手动移动电子邮件;虽然这 100% 保证有效,但一次移动一个帐户的 250 多万封邮件需要数周或数月的时间。
因此我开始研究其他工具和方法,包括开源的和商业的。
我尝试的第一个是离线IMAP,事实证明对 Exchange 不太友好;迁移过程的微妙影响导致耗尽Exchange 的命名属性因为每封移动的电子邮件都会生成一个唯一的标题。 有补丁可用为此,我们将唯一的标头更改为单个通用标头,并在其后添加唯一标识符,从而避免了耗尽问题。然而,在应用补丁后,仍然存在一些问题。真的很遗憾,因为如果能保持它们同步就好了。
在商业方面,我简单了解了一下跨端迁移器在试用模式下。结果好坏参半,而且二进制文件似乎很少附带文档。这很难令人鼓舞,尤其是对于最终用户一旦出现严重错误就会立即注意到的事情。
还有其他问题。邮箱存储为 Maildir,但邮箱名称符合 Thunderbird 的期望(我们已经使用 TBird 好几年了)。许多邮箱名称不匹配(已发送邮件与已发送邮件、垃圾邮件与已删除邮件等),在移植时需要进行有效翻译。是的,我们非常宠爱我们的最终用户 - 成功的迁移将包括通知他们我们正在切换到 Outlook 并为每个人提供 30 分钟的小课程,然后人们将首次打开他们新的基于 Exchange 的邮箱。
某个地方的某个人肯定某物这样可行...
编辑:后续行动
用 Ruby 编写的 larch 脚本提供了最简单的解决方案,尽管有一些注意事项。以下是所发生情况的精简版本:
- 获取用户的用户名和密码。转换后重置密码。
- 通过 IMAP 连接到用户的邮箱,并确保 INBOX 已订阅,并且所有消息都标记为已读。Exchange 端存在一个问题,如果消息未读且处于某种状态,则可能导致消息无法成功导入...
- 将后缀传输图更改为指向 Exchange 服务器,这会导致所有新传递的邮件都到达 Exchange 服务器而不是当前电子邮件服务器。
- 使用
larch
命令将电子邮件移走,从而忽略用户的垃圾箱。我们不得不屈服并忽略这一点,因为有些用户将垃圾箱变成了个人文件系统。 - 记下所有未转换的消息。重新检查并尝试再次复制它们。这只会移动较新的消息。
- 在 MySQL 中创建一条记录,指示 Dovecot 为该用户进入代理模式,并将该记录指向 Exchange 服务器。这允许现有客户端在我们准备好设置他们的 Outlook 安装之前不做任何更改地进行连接。
- 重新连接到用户的收件箱并检查所有消息是否都已被复制。
答案1
最好的方法是使用 imap!
您可以为每个用户提供 Outlook 中的两个帐户,让他们自己移动邮件。
我使用带有 Debian 包“uw-mailutils”的单独 Linux 机器和以下命令从 Cyrus 迁移到 Exchange 2003:
mailutil transfer -verbose {imap.xxx.org:143/imap/user=m_xxx}INBOX {exchange.xxxx.org:143/imap/[电子邮件保护]} 收件箱
mailutil 来自 UW-IMAP 项目。每个 Linux 发行版都应该包含它。
当它失败时(实际上并没有),我只需进入交换账户并删除“收件箱”
答案2
我在更大的系统上做过很多这样的迁移;300 多个邮箱,并且我已经向多个方向迁移:Courier -> Cyrus,Exchange -> Cyrus,Courier -> Exchange,以及 Cyrus -> Exchange......
我们选择的工具是 imapsync;一个开源 Perl 脚本。它使用实际的 IMAP 协议来处理迁移,从而减轻了处理每个实现的底层细节的需要(aildir 格式、邮箱注释,例如 DONT (.) 与斜线 (/) 分隔符)。
IMAPSYNC 也是可重入安全的。您可以在同一个帐户上多次运行它,它只会复制第一次没有复制的内容或可能收到的任何新电子邮件。
我们通常将所有用户帐户转储到 BASH 脚本中,最后按如下方式执行:
./imapsync --host1 mail.pozicom.net --user1 someone@domain --password1 mypassword \
--host2 localhost --user2 someone@domain --password2 mypassword
其中,host1 是您要从其复制的位置,而 host2 是您要复制到的位置。
您可以从这里获取 IMAPSYNC: http://freshmeat.net/projects/imapsync/
答案3
我用过“imapsync”程序之前先从 IMAP 服务器迁移到 Scalix(类似 Exchange 的系统)。想想 IMAP 邮箱的 rsync。
吉姆。
答案4
使用 运输套房。 它是专门为了这个目的而写的。
基本上,您导入 IMAP 用户和密码的 CSV 文件,它就会正确导入数据。如果您害怕进行批处理,也可以一次导入一个用户。实际上,导入过程很难出错。
不要使用 imapsync 或任何其他基于 IMAP 到 IMAP 的同步引擎。它虽然能工作,但大部分元数据都会被搞乱——特别是日期。即使使用 --syncinternaldates 选项,Exchange 仍会将日期覆盖为当前日期,这样您的迁移就会失败。