我们正在将大约 60 个用户邮箱从 Postfix/Dovecot/Maildir 设置移动到 Exchange 2007。我知道Microsoft 的 Transporter Suite,它将允许邮箱的 IMAP 到 Exchange 的批量转换。但是,如果出现不可预见的问题,如何清理一个拙劣的过程是一个问题。显然,尝试为用户删除损坏的 Exchange 邮箱也会导致一个听起来相当吓人的对话框,这意味着用户帐户也将被删除,而不仅仅是损坏的邮箱本身。虽然原始电子邮件存储(Maildir 格式)可用,但我们需要能够删除有问题的坏盒子并重复该过程,因此这种方法不是一个可行的选择。
在这一点上,我非常担心在没有大量人工干预的情况下影响批处理或批量样式的转换。我们试图通过使用 Outlook 或 Thunderbird 作为“枢轴”代理来避免访问 50 多个桌面和手动移动电子邮件;虽然这可以保证 100% 有效,但一次将超过 250 万条消息转移到一个帐户需要数周或数月的时间。
所以我开始研究其他工具和方法,包括开源的和商业的。
我尝试的第一个是OfflineIMAP,事实证明,它对Exchange 不是很友好;迁移过程的一个微妙影响会导致Exchange 的命名属性耗尽,因为每个移动的电子邮件都会生成一个唯一的标头。 为此提供了一个补丁,可将唯一标头更改为单个通用标头,该标头后面有唯一标识符,从而避免了耗尽问题。然而,在应用补丁后,仍然存在一些问题。真的很遗憾,因为让它们保持同步会很好。
在商业方面,我简要介绍了Transend Migrator的试用模式。结果好坏参半,似乎很少有随二进制文件一起提供的文档。这并不令人鼓舞,尤其是对于最终用户在出现严重错误时会很容易注意到的事情。
还有其他问题。邮箱存储为 Maildir,但邮箱名称符合 Thunderbird 的预期(我们已经使用 TBird 好几年了)。许多盒子名称不匹配(Sent vs. Sent Items、Trash vs. Deleted Items 等),需要在移植时进行有效翻译。是的,我们非常宠爱我们的最终用户 - 成功的迁移将包括通知他们我们正在切换到 Outlook,并为每个人提供 30 分钟的小型课程,然后人们第一次打开他们基于 Exchange 的新邮箱。
某人,某处肯定有一些有用的东西......
编辑:后续行动
用 Ruby 编写的 larch 脚本提供了最简单的解决方案,尽管有一些警告。这是发生的事情的一个高度浓缩的版本:
- 获取用户的用户名和密码。转换后重置密码。
- 通过 IMAP 连接到用户的邮箱,并确保订阅了收件箱,并且所有邮件都标记为已读。Exchange 端存在一个问题,如果邮件未读且处于某种状态,可能会阻止邮件成功导入...
- 将后缀传输映射更改为指向 Exchange 服务器,这会导致所有新的邮件到达 Exchange 服务器,而不是当前的电子邮件服务器。
- 使用
larch
命令移动电子邮件,省略用户的垃圾箱。我们不得不放弃并忽略这一点,因为有些用户将垃圾箱变成了个人档案系统。 - 请注意任何未转换的消息。重新检查并再次尝试重新复制它们。这只会移动较新的消息。
- 在 MySQL 中创建一条记录,指示 Dovecot 进入该用户的代理模式,并将记录指向 Exchange 服务器。这允许现有客户端保持不变,直到我们准备好设置他们的 Outlook 安装。
- 重新连接到用户的收件箱并检查是否复制了所有邮件。
我在更大的系统上做了很多这样的迁移;300 多个邮箱,我已经向多个方向迁移:Courier -> Cyrus、Exchange -> Cyrus、Courier -> Exchange 和 Cyrus -> Exchange...
我们选择的工具称为 imapsync;一个开源 Perl 脚本。它使用实际的 IMAP 协议来处理迁移,从而减轻了处理每个实现的底层细节的需要(aildir 格式、邮箱注释,例如 DONT (.) 与斜杠 (/) 分隔符。
IMAPSYNC 也是可重入安全的。您可以在同一个帐户上多次运行它,它只会复制第一次未复制的内容或可能已经到达的任何新电子邮件。
我们通常将所有用户帐户转储到 BASH 脚本中,最终执行如下:
host1 是您要复制的位置 host2 是您要复制到的位置。
您可以从这里获得 IMAPSYNC:http: //freshmeat.net/projects/imapsync/
最好的方法是使用 imap!
您可以通过在 Outlook 中为每个用户提供两个帐户来让每个用户自己移动邮件。
我使用带有 Debian 软件包“uw-mailutils”的单独 linux 框和以下命令从 Cyrus 迁移到 Exchange 2003:
mailutil transfer -verbose {imap.xxx.org:143/imap/user=m_xxx}收件箱 {exchange.xxxx.org:143/imap/[email protected]} 收件箱
mailutil 来自 UW-IMAP 项目。每个 Linux 发行版都应该包含它。
当它失败时(它没有),我会进入交换帐户并删除“收件箱”
我之前使用过“imapsync”程序从 IMAP 服务器迁移到 Scalix(类似 Exchange 的系统)。想想 IMAP 邮箱的 rsync。
吉姆。
我们有一个巨大的大型邮件系统,并且经常从其他邮件系统(通常是 Notes 或 Groupwise)接收用户。所有这些迁移的一个共同点是数据迁移部分总是一场灾难。总是有棘手的问题,VIP问题最终被优先考虑,普通用户群受到影响。迁移工具有永远无法修复的错误,因为没有人会执行 Notes->Exchange 迁移两次!
我们正在寻找的未来策略是一个主要是新建邮箱,用户可以识别必须保留的电子邮件。对你来说很容易——让 dovecot 服务器运行 6 个月,设置指向旧 imap 系统的 Outlook 配置文件(我相信这可以用 Outlook 2007 编写脚本)并让用户在自己的时间迁移。
您会发现大多数人真的不需要他们所说的他们需要的东西,并且在 6 个月后,将数据移动到新系统的任何合法需求都将完成。
另一种选择是使用邮件归档解决方案。由于诉讼,我们必须归档所有电子邮件,而且您通常可以将旧系统中的消息“摄取”到托管归档解决方案中。查看 Postini 和 Microsoft 托管服务。
使用 运输工具套件。 它是专门为此目的而编写的。
基本上,您导入 IMAP 用户和密码的 CSV 文件,它将正确导入数据。如果您害怕执行批处理,也可以一次导入一个用户。实际上很难搞砸进口。
不要使用 imapsync 或任何其他基于 IMAP 到 IMAP 的同步引擎。它有点工作,但大部分元数据会被搞砸——特别是日期。即使使用 --syncinternaldates 选项,Exchange 仍会将日期覆盖为当前日期,并且您的迁移将失败。