65.9K
CodeProject 正在变化。 阅读更多。
Home

跨平台邮件迁移。

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2009年4月25日

CPOL

2分钟阅读

viewsIcon

13476

将 Linux 邮件迁移到 Windows 邮件。

引言

historically, 从 Linux 邮件系统(例如 Postfix/Dovecot)迁移到 Windows 邮件系统(例如 Smartermail)并非一个无缝的过程。邮件格式差异很大,以至于复制邮件几乎不可能。用户最好使用 POP3 将所有邮件从 Postfix 服务器下载,然后连接到 Smartermail 服务器以完成迁移。但是,如果您的邮件可能达到 1GB,这有多大用处?或者,如果您的公司有很多非技术用户,这是否具有可扩展性?

Using the Code

一个可行的解决方案是使用一个名为 'imapsync' 的 Perl 模块。顾名思义,必须在源服务器和目标服务器上启用 IMAP。您可以从以下网址下载此模块:这里。还需要一些 Perl 模块:

  • Mail::IMAPClient 2.2.9 (仅此版本)
  • Digest::MD5
  • Term::ReadKey
  • IO::Socket::SSL
  • Date::Manip
  • Digest::HMAC_MD5 (可选)

所有这些模块都可以从 CPAN 网站获取。安装在 Postfix 服务器上后,请确保可以通过端口 143 telnet 到目标服务器。如果任何 IPtables 或防火墙规则阻止了 IMAP 通信,imapsync 显然会出错。

对于每个用户,您可以运行如下命令:

bash # imapsync --host1 localhost --user1 system_name 
	--password1 source_password --host2 destination_IP --user2 email_address 
	-password2 destination_password --authmech1 source_authmethod 
	--authmech2 LOGIN --prefix2 "" --sep2 "/"

关注点

请注意,用户必须已经存在于源服务器和目标服务器上。Imapsync 不会创建任何用户。源服务器和目标服务器的用户也不一定必须相同。但是,如果 Postfix 用户不是虚拟用户,则使用系统名称很重要。可以在 /etc/dovecot.conf 中的 'auth default' 下查找源服务器的身份验证方法。可能存在多个。通常使用 'PLAIN' 或 'LOGIN'。Dovecot 在建立连接时擅长通告其命名空间,但 Smartermail 不擅长。我们可以使用 prefix2 和 sep2 参数来指定这一点。

为了提高安全性,可以将 password1/password2 替换为 passfile1/passfile2,并提供一个文件路径,以便密码对使用 ps 命令的其他用户不可见。还可以使用正则表达式等高级功能,例如包含和排除。如果您希望每天通过 cron 作业同步过去一天的邮件,可以在消息上放置年龄过滤器。还可以使用删除参数来有效地“移动”邮件而不是复制它。玩得开心!

历史

  • 2009年4月22日:初始版本
© . All rights reserved.