27.7. mailsync 简介

mailsync 主要适用于以下三项任务:

27.7.1. 配置和用法

mailsync 能对邮箱本身(储存区)和两个邮箱之间的连接(通道)加以区分。储存区和通道的定义储存在 ~/.mailsync 中。以下段落解释了若干储存示例:

简单的定义可能显示如下:


store saved-messages { 
   pat Mail/saved-messages
prefix  Mail/
}

Mail/ 是包含电子邮件文件夹的用户主目录中的一个子目录,其中包含文件夹 saved-messages。如果 mailsync 是通过 mailsync -m saved-messages 启动的,则会列出 saved-messages 中所有信件的索引。如果指定了以下定义


store localdir { 
pat     Mail/* 
prefix  Mail/ 
} 

命令 mailsync -m localdir 将列出所有储存在 Mail/ 中的信件。相比之下,命令 mailsync localdir 只列出文件夹的名称。IMAP 服务器上的储存区的指定方式如下所示:


store imapinbox {
server {mail.edu.harvard.com/user=gulliver}
ref    {mail.edu.harvard.com}
pat    INBOX 
}

上例仅涉及 IMAP 服务器上的主文件夹。子文件夹的储存区显示如下:


store imapdir {
server {mail.edu.harvard.com/user=gulliver}
ref {mail.edu.harvard.com}
pat INBOX.*
prefix  INBOX.
}

如果 IMAP 服务器支持加密连接,服务器的指定方式将改为


server {mail.edu.harvard.com/ssl/user=gulliver}

或者,如果服务器证书不详,则改为


server {mail.edu.harvard.com/ssl/novalidate-cert/user=gulliver}

前缀将在以后说明。

现在 Mail/ 下的文件夹应能连接到 IMAP 服务器上的子目录:


channel folder localdir imapdir {
msinfo .mailsync.info
} 

mailsync 使用 msinfo 文件跟踪已经同步的信件。

命令 mailsync folder 执行以下操作:

  • 在两端扩展邮箱模式。

  • 从生成的文件夹名称中删除前缀。

  • 成对同步文件夹(若不存在则创建文件夹)。

相应地,IMAP 服务器上的文件夹 INBOX.sent-mail 将与本地文件夹 Mail/sent-mail 进行同步(只要存在上面说明的定义)。各个文件夹之间的同步将执行如下:

  • 如果两端都存在同一封信件,则不会执行任何操作。

  • 如果一端缺少信件并且是新信件(未列在 msinfo 文件中),则信件将被传送到这一端。

  • 如果只有一端有信件并且是旧信件(已列在 msinfo 文件中),则信件将从这一端删除(因为另一端显然有过该信件,只不过已经删除)。

要事先了解传送哪些信件以及在同步过程中删除哪些信件,请用 mailsync folder localdir 启动带有通道储存区的 mailsync。此命令将生成一个包含本地主机上的所有新信件的列表,以及一个包含要在同步过程中从 IMAP 端删除的所有信件的列表。同样,命令 mailsync folder imapdir 将生成一个包含 IMAP 端上的所有新信件的列表,以及一个包含要在同步过程中从本地主机删除的所有信件的列表。

27.7.2. 可能的问题

万一数据丢失,最保险的方法是删除相关的通道日志文件 msinfo。这样,只在一端存在的所有信件都将被视为新信件,可以在下一次同步时传送。

只有带有信件 ID 的信件才会被同步。缺少信件 ID 的信件将被忽略,也就是不传送或删除。缺少信件 ID 通常是由于发送或撰写信件时程序出错造成的。

在特定的 IMAP 服务器上,主文件夹称作 INBOX,子文件夹可以是随机选择的名称(不同于 INBOX 和 INBOX.name)。因此,对于这类 IMAP 服务器,不可能为子文件夹专门指定某种模式。

将信件成功传送到 IMAP 服务器后,mailsync 所用的邮箱驱动程序 (c-client) 会设置特殊的状态标志。出于这种原因,有些电子邮件程序(如 mutt)无法将这些信件识别为新信件。使用选项 -n 可以禁止设置这种特殊状态标志。

27.7.3. 参见信息

有关详细信息,请参见 mailsync 程序提供的 /usr/share/doc/packages/mailsync/ 中的 README。在这种连接中,RFC 2076“Common Internet Message Headers”(常见因特网信头)值得特别注意。