MS Outlook 转换为 Unix 邮箱迷你 HOWTO

Greg Lindahl, lindahl@pbm.com

v1.4, 2004-01-08


本迷你指南介绍了将 Microsoft Outlook(不是 Outlook Express!)中的旧电子邮件转换为典型的 Unix 文件格式的方法。

1. 简介

2. 使用 Mozilla Mail 转换

3. 使用 IMAP 转换


1. 简介

虽然已经存在一些程序可以将某些格式(例如 Microsoft Outlook Express)转换为 Unix 格式,但 Outlook 用户面临更大的挑战。一种转换方法是使用 Windows 下的 Mozilla Mail;另一种方法涉及更复杂的方法。本迷你 HOWTO 中解释了这两种方法。

Outlook 用于 .PST 文件的数据库格式称为 Jet,文档位于

http://msdn.microsoft.com/library/techart/olexcoutlk.htm

1.1 版权

版权 (c) 2001-2004 Greg Lindahl

根据 GNU 自由文档许可证 1.1 版或自由软件基金会发布的任何后续版本的条款,允许复制、分发和/或修改本文档;没有不变章节,没有封面文本,也没有封底文本。许可证副本可以在以下网址找到

https://gnu.ac.cn/copyleft/fdl.html

我请求将更正和/或意见转发给文档维护者。如果您正在考虑进行翻译以外的衍生作品,我请求您与当前的维护者讨论您的计划。

1.2 免责声明

您需要自行承担使用本文档中信息的风险。我对本文档的内容不承担任何潜在责任。您需要完全自行承担使用本文档的概念、示例和/或其他内容的风险。

所有版权归其所有者所有,除非另有明确说明。本文档中使用术语不应被视为影响任何商标或服务标记的有效性。

特定产品或品牌的命名不应被视为认可。

强烈建议您在进行重大安装之前备份您的系统,并定期备份您的系统。

请勿将您的猫放入正在运行的微波炉中。

1.3 新闻

1.01:修复了 inetd/xinetd 启动说明中的小错误。

1.1:添加了关于 Kmailcvt、Mozilla 以及如何在 Outlook 处于 Exchange 模式时使其与 IMAP 服务器通信的信息。

1.2:添加了关于使用 Mozilla 完成相同任务的详细信息

1.2.1:修复了格式错误。

1.2.2:根据 GFDL 重新许可,更多小错误修复。

1.3:更多小修复。

1.4:来自 Scott Phelps 的关于 TNEF 内容的信息(谢谢!)

1.4 其他方法

转换实用程序的列表(许多是商业的)可以在以下网址找到

http://www.emailman.com/conversion/index.html

我听说程序 Kmailcvt 现在可以转换 Outlook 邮箱。但是,我不能 100% 确定这个说法是否属实,因为 Kmailcvt 肯定可以转换 Outlook Express 邮箱,这与 Outlook 邮箱完全不同。所以,如果您弄清楚了这一点,请告诉我。


2. 使用 Mozilla Mail 转换

我也听说 Windows 下的 Mozilla Mail 可以转换 Outlook 邮箱——但我得到的唯一可靠报告是附件没有被转换,所以如果附件对您很重要,请不要使用此方法。

Ximian Evolution 网站上有一些文档。我没有尝试过这个方法,因为我已经没有 Windows 机器了。但是,以下是他们说的做法

运行 Mozilla Mail

转到“文件 > 导入”,然后选择您希望从 Outlook 导入邮件。完成后,您就快完成了。

我相信 Mozilla 将其所有邮箱都存储为 Unix mbox 格式文件,即使在 Windows 下也是如此。因此,您要做的就是将这些文件传输到您的 Linux 机器。您可以在以下位置找到它们

C:/windows/Application Data/Mozilla/Profiles/default/XXX/Mail/imported.mail/,其中 XXX 将是一些数字的集合。如果您的 Windows 机器上有多个用户,“default”将改为您的用户名。

正如我之前提到的,我从未尝试过这种方法,所以我不知道它效果如何。特别是,第 3.4 节中提出的问题可能也适用于这种转换方法。

顺便说一句,Mozilla 只能在 Windows 下读取 Outlook 邮箱的原因是它调用了 Microsoft DLL 来完成这项工作。


3. 使用 IMAP 转换

3.1 准备工作

首先,请确保您想以这种方式进行操作。特别是,第 2 节解释了如何在 Windows 下使用 Netscape Mail 进行转换。这比用这种方式更容易。

如果您决定以这种方式进行操作,您需要确保您的 Outlook 副本可以与 IMAP 服务器通信。当我第一次编写本 HOWTO 时,我假设 Outlook 就是 Outlook。不是的。如果您在企业/工作组模式(与 Exchange 通信)而不是 Internet 模式(与 POP/IMAP 服务器通信)下使用 Outlook,您将必须更改模式。

要测试您是否没问题,请查看 Outlook 的“工具”菜单,看看是否有“帐户”项。如果有,您就没问题,可以继续执行第 3.2 节。如果没有,请找到您的毛巾,并继续阅读。

更改模式并非易事,但一位热心的读者 (Matt Huyck) 发送了以下说明,这些说明看起来很危险,而且我没有测试过

从“工具”菜单中选择“选项...”,然后转到结果“选项”对话框中的“邮件服务”选项卡。在该选项卡的底部有一个标记为“重新配置邮件支持...”的按钮。屏住呼吸,然后单击它。一个新的窗口弹出,标题栏中显示“Outlook 2000 启动”,标题为“电子邮件服务选项”。有两个相关的单选按钮:“仅 Internet”和“企业或工作组”。切换到“仅 Internet”,然后单击“下一步 >”。然后会提示您一个很长的消息框,您应该仔细阅读,因为您即将对 Exchange 客户端配置进行重大(但可逆的)更改。如果您还没有晕过去,现在可以停止屏住呼吸了。虽然它没有明确说明,但您需要确保在单击“是”之前拥有 Microsoft Office 安装 CD 的副本。单击“是”,让 Outlook 执行几秒钟的操作,直到它完全退出。再次打开 Outlook。在这里,系统可能会提示您提供安装 CD。重新配置完成后,您就可以继续执行 HOWTO 的步骤 3.2 了。

要返回到您原来的 Outlook 配置,请按照相同的说明进行操作,但显然您将单击*另一个*单选按钮。

如果您一直在使用 Exchange,还有一件事是不同的。正如您在第 3.4 节末尾指出的那样,“原始的 'From ' 行”未被保留。但是,对于 Exchange 用户来说,“幸运的是,您实际上并不需要该信息”的评论并不完全适用。缺少的“From”标头是唯一包含在内部 Exchange 服务器上发送的消息(即,未通过任何 Internet 网关的消息)中发送者身份的标头。我通过使用“文件”菜单中的“导入和导出...”命令将邮件文件夹另存为文本文件来保留我的“From”标头。我计划编写一些扭曲的 Perl/Grep 代码,将这些“From”标头重新插入到我的 Linux mbox 文件中。如果我成功了,我会告诉您。

3.2 在您的 Linux 机器上安装 IMAP 服务器(临时!)

安装内容因 Linux 发行版而异,因此我将以 RedHat 7.0 为例。首先,您需要安装正确的软件包,通常命名为“imap”或“uw-imap”之类的名称

 cd /home/redhat-7.0-cd/RedHat/RPMS
 ls *imap*
 rpm -i imap*

实际上,由于我进行了“工作站”安装,我还必须安装 xinetd 软件包;rpm 给出了一个错误,告诉我这样做。当然,它在 RedHat 7.0 的第二张 CD 上。使用“apt-get”的 Debian 用户不必担心此类问题。

接下来,我们需要启用 imap 服务器。在我的基于 Gnome 的桌面上,这是通过“开始” -> “系统设置” -> “服务器设置” -> “服务”中的图形工具完成的,或者您可以手动完成。这通常由文件 /etc/inetd.conf 中的一行控制

 #imap    stream  tcp     nowait  root    /usr/sbin/tcpd        /usr/sbin/imapd

上面的行被注释掉了;删除前面的 # 符号。或者,如果您的系统使用 xinetd,则编辑 /etc/xinetd.d/imap 并将“disable=yes”更改为“disable=no”。

然后通过执行以下操作重启 inetd 或 xinetd

 /etc/rc.d/init.d/inetd restart

 /etc/rc.d/init.d/xinetd restart

如果一切都失败了,请重启。

您实际上并不想长时间保持 IMAP 服务器启用状态。此服务器以 root 身份运行,并且过去存在安全漏洞。因此,除非您希望永久使用它,否则您不应保持启用状态。我们将在第 3.5 节中禁用此服务器。

为了将 Outlook 连接到此 IMAP 服务器,您需要知道 Linux 机器的名称或 IP 地址。

3.3 将您的 Outlook 客户端连接到服务器

为了将我们所有的电子邮件复制到服务器,我们需要告知您的 Outlook 客户端有关此新服务器的信息。从“工具”菜单中选择“帐户...”,然后“添加”一个新帐户“邮件...”。重要的项目是服务器使用 IMAP 下载电子邮件,传入邮件服务器是您在第 3.2 节中获得的 Linux 机器的名称或 IP 地址,用户名和密码应该是您在 Linux 机器上的用户名和密码。(像往常一样,在此目的上使用 Linux 上的 root 帐户不是一个好主意。)

点击“完成”后,通过突出显示此新帐户并单击“设置为默认值”将其设置为默认帐户。Outlook 应该连接到您的 IMAP 服务器,并且您的 IMAP 服务器的名称应该出现在您的文件夹列表的底部。单击它;您应该看到一个收件箱文件夹。(请注意,如果您的 Linux 机器上不存在 /var/mail/yourusername,您将无法将任何邮件拖放到您的收件箱中... 并且错误消息会令人困惑。但是,这不是我们要做的。)

3.4 复制所有电子邮件

此时,您可以将整个电子邮件文件夹从 Outlook 拖放到 IMAP 服务器名称上。这将把电子邮件(包括所有附件)复制到 Linux 机器。不幸的是,它也会立即从 Outlook 中删除它。为了在不删除项目的情况下复制项目,请右键单击文件夹名称并选择“复制”选项。对于目标,请在列表底部选择您的 Linux 服务器。

但是,生活并非如此简单。Outlook 支持包含文件夹的文件夹,这些文件夹也包含邮件。Linux IMAP 服务器不支持这一点(至少那些使用 Mailbox 格式的服务器);文件夹要么是包含邮件的常规文件,要么是包含子目录和文件的目录。因此,如果您的 Outlook 中的文件夹既包含邮件又包含子文件夹,则无法将整个树复制到 Linux IMAP 服务器。Linux IMAP 服务器的另一个不兼容之处是,您必须提前告知它新文件夹是否将包含子文件夹或邮件。您可以通过在创建文件夹时在文件夹名称后附加斜杠 (/) 来完成此操作。创建文件夹后,此斜杠将消失。

因此,为了将文件夹树复制到 Linux IMAP 服务器,首先您需要在 Linux IMAP 服务器上创建现有文件夹结构的副本。在执行此操作时,请注意哪些现有文件夹既包含子文件夹又包含邮件。您需要将这些邮件移动到其他位置。创建整个树结构后,您可以将文件夹组复制或移动到 Linux IMAP 服务器。

最后要注意的一个不兼容之处是,Linux IMAP 服务器不允许文件夹名称中包含斜杠 (/)。您需要在复制或移动此类文件夹之前重命名它们。

在 Linux 机器上,文件夹以文件和目录的形式出现在您的主目录中。这些文件的格式是通常的 Unix 邮件格式,大多数 Unix/Linux 邮件工具要么直接使用,要么可以转换为/从其转换。带有附件的文件将具有 MIME 附件;每个文件夹还有一个额外的消息,这是一个(无用的)标头。

(未保留的一条数据是原始的“From ”行,其中包含电子邮件的信封地址。幸运的是,您实际上并不需要该信息。)

关于附件,还有一个额外的复杂情况。Microsoft 有时会将多个附件捆绑到一个 ms-tnef 附件中;TNEF 代表传输中性封装格式。此附件包含多个 MIME 编码的附件。我很幸运我的邮件文件夹中不包含任何这些内容——它们似乎是在人们向您发送“富文本格式”电子邮件时创建的——它包含两个备选项,一个以纯文本格式,另一个是以 TNEF 封装的富文本格式的消息以及任何附件。

幸运的是,有一些方法可以解包 TNEF 附件。一种是 sourceforge 上托管的 tnef 项目,另一种是 ktnef,它是 KDE 的一部分。

3.5 从您的 Linux 机器卸载 IMAP

传输完所有电子邮件后,出于前面提到的安全原因,您将需要从 Linux 机器上卸载 IMAP 服务器。这涉及您安装服务器时采取的相同 2 个步骤

  1. 删除 RPM
      rpm -e imap
    
  2. 删除 /etc/inetd.conf/etc/xinetd.d/imap 中的行
  3. 重启 inetd 或 xinetd,或重启。

瞧!您已经朝着无 Microsoft 生活方式迈出了又一步。