本文档的目的是解释电子邮件的工作原理,并解答一些符合关于 Linux 下电子邮件软件的“常见问题”定义的问题。
现代 Linux 发行版为您提供了可用的、预配置的电子邮件设置,通常以 sendmail-v8 的最新版本为特色。本指南假定您已拥有这样的设置和可用的互联网连接。
(有关如何设置到 ISP 的 PPP 或 SLIP 链接的信息,请参阅ISP 连接指南。)
因此,与 Vince Skahan 的 1.x 版本不同,本指南侧重于用户问题和架构;关于 UUCP、IDA sendmail 和其他以前重要主题的大部分技术细节已被删除。
本文档将每月发布到新闻组 comp.os.linux.answers。您还应该能够在万维网上查看本指南的最新版本,网址为 http://metalab.unc.edu/LDP/HOWTO/Mail-User-HOWTO.html。
本节包含与用户代理相关的信息,这意味着用户看到和使用的软件。此软件依赖于《邮件管理员指南》中描述的传输代理(其中还包括用户代理配置和管理员的故障排除技巧)。
邮件用户代理调用一些编辑器来辅助邮件的编写。默认编辑器因代理而异。它们中的大多数都遵循一个可以追溯到 Unix 早期的约定;环境变量的内容VISUAL如果存在,则被视为您首选编辑器的名称。如果未设置 VISUAL,则检查变量 EDITOR。
常用的值EDITOR包括 vi 和 emacs。但如果您像我一样,是那种始终运行 GNU Emacs 的人,那么设置EDITOR为值 emacsclient 是最有用的方法。将以下行与您的~/.emacs文件一起使用
(autoload 'server-edit "server" nil t) (server-edit) |
emacsclient 程序运行时,会尝试与您已运行的 Emacs 实例建立通信,并将邮件消息临时文件交给该 Emacs 进行编辑。这样做的效果是,当您的邮件程序调用编辑器时,一个邮件编写窗口会在您的 Emacs 中弹出。
当您准备好将文件交还给邮件程序发送时,键入 C-x #。邮件缓冲区将离开您的显示器,您的邮件程序调用的 emacsclient 实例将返回,将控制权交还给邮件程序。
可以同时打开多个 emacsclient 实例而不会混淆 Emacs。但是,在 emacsclient 会话运行时调用另一个 Emacs 可能会使 emacsclient 足够混乱,以至于之后无法找到任何一个实例。如果发生这种情况,请关闭所有 Emacs 实例并仅重启一个。
如果您运行的是 XEmacs 而不是 GNU Emacs,这些说明会略有变化。在这种情况下,您需要设置EDITOR为 gnuclient。在最近的版本中,您的 init 文件将位于~/.xemacs/init.el而不是~/.emacs.
这是我使用和推荐的。它源自 elm,默认情况下具有类似的命令,但功能更强大且可配置性更高。它可以是 POP3 或 IMAP 客户端,并包括对 MIME 和 PGP 的出色支持。网络上有一个 Mutt 主页。
Mutt 遵循 EDITOR/VISUAL 约定。
Elm 是第一个现代的、面向屏幕的 Unix 邮件程序,但多年来一直停滞不前,并且正在被 Mutt 取代。某些版本的 elm 内置了 POP3 支持。有关更多信息,请参阅 Metalab 邮件用户代理目录中的 elm 源代码和安装说明。以下是一些偶尔会让人们感到困惑的点
不,标准的 elm 不支持 PGP。有 PGP 支持补丁,但 Mutt 的 PGP 支持更出色。如果您想使用 PGP,我建议使用 Mutt。
Elm 遵循 EDITOR/VISUAL 约定。
Pine 是一种为新手设计的用户代理;它包括新闻阅读功能和对 IMAP 远程邮件协议的内置支持。很多人都认为它对新用户来说非常好。我发现它贫乏的命令集、有限的可配置性和原生编辑器难以接受。但是,它具有出色的内置 IMAP 支持。如果您想查看它,可以在 http://www.washington.edu/pine 获取发行版。
Pine 遵循 EDITOR/VISUAL 约定。
Netscape 浏览器内置了 POP3 和 IMAP 远程邮件功能,因此可以用作邮件用户代理。我不建议这样做;它不专注于作为 MUA,因此不提供真正的 MUA 提供的许多服务(例如别名和 PGP 处理)。但是,它确实支持 LDAP 和 SSL。
Netscape 提供自己的迷你编辑器,与整个浏览器中使用的编辑器相同(例如,表单中的文本字段)。
Emacs 有一个名为 smail 的模式可以发送邮件,另一个名为 rmail 的模式可以读取邮件。smail 模式非常有用,因为您可以在完整的 Emacs 环境中编写邮件(但也请参阅本文档中其他地方关于 emacsclient 的讨论)。
另一方面,不建议使用 rmail 模式。每次运行它时,它都会将您的收件箱转换为 BABYL 格式;普通的邮件工具会对此感到困惑。(如果发生这种情况,请从 Emacs 命令行执行 M-x unrmail。)
有一个用于 emacs 的邮件阅读器,名为“vm”,它可以读写标准的 V7 邮箱。它未与 GNU Emacs 一起分发,但您可以在 http://www.wonderworks.com/vm/ 找到其主页。
emacs 最流行的邮件阅读器可能是 GNUS,它与 GNU Emacs 一起分发。它是 USENET 新闻和邮件的客户端。
Emacs smail/rmail/vm 不遵循 EDITOR/VISUAL 约定。相反,您使用它们嵌入的 Emacs。
“别名”是一种设置伪地址的方式,该伪地址只是将邮件定向到另一个(单个)地址。别名有两种:MUA 别名和 MTA 别名。
MUA 别名是在您的 MUA 中设置的一种个人速记。其他人将无法看到或使用此别名。例如,您可以编写
alias esr Eric S. Raymond <esr@thyrsus.com> |
在您的 mutt 配置文件中。这将告诉 mutt,当它在地址行中看到“esr”时,它应该表现得好像您键入了“esr@thyrsus.com”。或者您可以键入“mutt esr”,扩展地址将自动填写在“to”行中。
MTA 别名是您的 MTA 扩展的别名;每个人都可以在您的机器上和远程使用它。要创建 MTA 别名,您必须修改系统文件,通常但不总是/etc/aliases或/etc/mail/aliases(位置取决于您的 MTA)。查看系统上的别名可能对您有所启发;它应该包含许多标准别名,例如“postmaster”。
您的 MTA 也可能允许别名的目标是一个文件名,该文件名将被视为邮件要附加到的邮箱(这对于存档邮件很有用)。它也可能允许别名的目标是一个程序,在这种情况下,发送到该别名的邮件将被传递到该程序的实例的标准输入。
MTA 别名通常需要管理员权限才能设置。但是,邮件用户应该能够在没有管理员干预的情况下设置自己的邮件转发。
为了支持这一点,大多数 MTA 都遵循 sendmail 的引导,并查找名为.forward在您的主目录中的文件。此文件的内容被解释为应接收您所有邮件的别名目标;它应该是一个地址。此工具最常见的用途是将您的邮件重定向到另一台机器上的帐户。
进一步说明:.forward 文件的存在,无论其中有什么内容,都会告诉系统将该文件的内容视为您所有邮件的别名目标。如果您创建一个空的 .forward 文件,您的邮件将消失。大多数人使用它将他们的邮件转发到另一台机器,因此最常见的是第一行只有一个电子邮件地址,没有其他内容。MTA 将遵循您的 .forward 文件第一行中的任何内容作为别名的目标。其他一切都将被忽略。如果目标格式错误,就像任何其他别名一样,邮件将消失。
另一个常见用途.forward工具是将您的邮件传递给“休假”程序。休假程序读取收到的邮件并自动生成对邮件的预设回复;之所以这样称呼它们,是因为最常见的预设回复形式是通知发件人您正在休假,并且在给定日期之前无法联系到您。
没有一种通用的标准休假程序。造成这种情况有两个很好的理由:一是,这样一个程序很容易编写为 shell 脚本或过滤器规则(见下文);二是,休假程序与邮件列表的交互效果不佳。
在设置自动回复之前,您应该暂时取消订阅您加入的所有邮件列表;否则,邮件列表的所有成员都会发现他们被您的休假程序发送的预设消息淹没。这被认为是非常粗鲁的行为,并且保证您在返回时会受到非常冷淡的接待。
邮件列表是一个伪地址,它将邮件发送给多个用户。
在其最简单的形式中,邮件列表只是一个具有多个收件人的 MTA 别名。一些小型邮件列表就是以这种方式维护的。Sendmail 通过支持
中的语法来提供帮助/etc/aliases语法,该语法包括别名目标端中给定邮件列表文件的内容。它看起来像这样
admin-list: ":include:/usr/home/admin/admin-list" |
其优点是 admin-list 文件可以位于非特权用户空间的某个位置(只需要 root 权限来设置原始包含)。一些其他 MTA 具有类似的功能。
这些简单的列表通常称为“邮件反射器”。邮件反射器存在一些问题。一个是来自广播失败尝试的退回消息会发送给所有用户。另一个是所有订阅和取消订阅都必须由邮件列表管理员手动完成。
一种称为邮件列表管理器的软件已经发展起来,以解决这些问题和其他相关问题。其最重要的功能是允许邮件列表用户在无需通过列表维护者的情况下订阅和取消订阅。
邮件列表管理器保留自己的用户列表信息,并通过
中的程序别名连接到 MTA。/etc/aliases. 例如,如果上面的 admin-list 通过 sendmail 系统上的名为 SmartList 的邮件列表管理器,则
的一部分可能如下所示/etc/aliases可能如下所示
admin-list: "|/usr/home/smartlist/bin/flist admin-list" admin-list-request: "|/usr/home/smartlist/bin/flist admin-list-request" |
请注意,这是一对别名。真正的邮件列表通常有一个请求地址,用于用户订阅和取消订阅请求。将订阅/取消订阅请求发送到此类列表的主地址被认为是粗鲁和无知的行为——不要这样做。
请求地址背后的机器人除了订阅/取消订阅之外,还可以提供其他功能。它可以响应帮助请求,允许您查询列表中的人员,或让您自动访问列表存档。它还可以允许列表管理员限制仅向已知成员发布帖子,将列表设置为在非成员首次发布帖子时自动订阅,或设置各种安全策略选项。邮件列表管理器主要在这些辅助功能的设计和范围上有所不同。
不幸的是,向邮件列表请求机器人发送命令的格式不是标准的。有些期望命令在主题行中,有些忽略主题行并期望命令在消息正文中。您需要注意您首次订阅时收到的回复邮件;最好将此类邮件保存到订阅邮箱以供以后参考。
最需要了解的邮件列表管理器是 majordomo、listserv、listproc 和 smartlist;majordomo 是最受欢迎的,遥遥领先。最近,mailman,一个具有相当不错的基于 Web 的注册/注销/管理界面的列表管理器,变得非常流行,并且可能正在使较旧的程序过时。Web 上有一个相当全面的 列表,其中列出了此类软件包。
有关邮件列表管理器的更多信息,请查阅 List-Managers 邮件列表上的资源,包括 FAQ(注意:此列表不适合用于提问操作方法)。
邮件过滤器是一个位于本地传递代理和您之间的程序,它会在您看到邮件之前自动调度或拒绝邮件。
邮件过滤器有许多用途。最重要的用途是垃圾邮件过滤、按主题或发件人调度到多个邮箱以及自动回复邮件。
通常,您可以通过在您的 .forward 文件中为过滤器程序放置程序别名,并编写过滤器规则文件来设置邮件过滤。过滤器规则文件的格式和位置因过滤器程序而异。
Chris Lewis 的电子邮件软件调查的 第 3 部分中对三个主要邮件过滤器(procmail、mailagent 和 deliver)进行了良好的功能总结。其中最受欢迎的是 procmail(尽管其规则语法相当糟糕),它在 Linux 系统上普遍存在(实际上,通常用作系统的本地传递代理)。
垃圾邮件有时被称为“UCE”(未经请求的商业电子邮件)或“UBE”(未经请求的批量电子邮件)。顾名思义,这是一种令人讨厌的广告形式,它用格式信件塞满您的邮箱。(术语“垃圾邮件”来自 Monty Python 的飞行马戏团短剧,其中一群维京人无休止地重复吟唱“垃圾邮件垃圾邮件垃圾邮件垃圾邮件……”)。
大多数垃圾邮件似乎都包含金字塔计划的招揽、色情广告或(烦人地)试图销售垃圾邮件发送程序。一些个别垃圾邮件(如 MAKE MONEY FAST 或 Craig Shergold 明信片骗局)非常顽固,以至于成为传奇。垃圾邮件往往既冗长又文盲。这是对时间的浪费,也是对网络带宽的巨大浪费。
如果您正被垃圾邮件淹没,请接受教育。浏览 在互联网上打击垃圾邮件!页面。消灭垃圾邮件!页面在阻止或追踪垃圾邮件的方法方面尤其有效。
有许多 Usenet 群组专门讨论电子邮件技术问题
ELM 邮件系统。
Rand 消息处理系统。
多用途互联网邮件扩展。
关于计算机邮件的一般讨论。
多媒体邮件。
邮件用户 Shell (MUSH)。
BSD sendmail 代理。
smail 邮件代理。
uucp 环境中的邮件。
以下是一组非详尽的书籍,它们将有所帮助……
来自 O'Reilly and Associates 是关于 sendmail-v8 和 sendmail+IDA 的权威参考。对于任何希望在不流血的情况下理解 sendmail 的人来说,它是“必备”的。
来自 Osborne 是一本优秀的参考书,它解释了互联网上可用的各种服务,并且是关于新闻、邮件和各种其他互联网资源的绝佳信息来源。
来自 LDP 的 Olaf Kirch 可在网上获得,并且也由(至少)O'Reilly 和 SSC 出版。它是学习您曾经想象过需要了解的关于 Unix 网络的一切的绝佳一站式购物指南。
还值得一提的是 Chris Lewis 关于 unix 电子邮件软件的定期发布,该发布可在 ftp://rtfm.mit.edu/pub/usenet/comp.mail.misc 上以名为“UNIX_Email_Software_Survey_*”的文件形式获得。HTML 版本位于 http://www.faqs.org/faqs/mail/setup/unix/。截至 2005 年撰写本文时,此帖子自 2000 年以来尚未认真更新。
相对于其他 Unix 系统,在 Linux 下配置和运行邮件不再有任何特殊之处。因此,您几乎可以肯定不希望将通用的邮件相关问题发布到 comp.os.linux.* 新闻组。
除非您的帖子是真正特定于 Linux 的(即,“请告诉我 SLS1.03 版本的 smail3.1.28 中已经编译了哪些路由器”),否则您应该在上面引用的新闻组或邮件列表中提出您的问题。
让我再说一遍……
几乎没有理由在 comp.os.linux 层次结构中发布任何与邮件相关的内容了。comp.mail.* 层次结构中已经存在新闻组来处理您的所有问题。
如果您向 comp.os.linux.* 发布非 Linux 特定问题,则您找错了地方寻求帮助。电子邮件专家会在上面指出的地方活动,而通常不会在 Linux 群组中活动。
为非 linux 特定问题发布到 Linux 层次结构会浪费您的时间和其他所有人的时间……并且经常会延迟您获得问题的答案。
(Vince 撰写了本节,但我的政策相同。)
我对关于本文档内容的任何反馈(正面或负面)通过电子邮件感兴趣。如果您发现错误或明显的遗漏,请务必与我联系。
我会阅读所有收到的电子邮件,但不一定会回复。增强功能请求将根据当天可用的时间、请求的价值和每日血压的组合来考虑和处理 :-)
恶意邮件将悄悄地发送到 /dev/null,所以不要费心了。
特别是,Linux 文件系统路径名标准是一个不断发展的事物。本文档中的内容仅用于说明,基于编写文档该部分时的当前标准以及我在发行版或“套件”中亲自看到的路径。请查阅您特定的 Linux 发行版以获取它们使用的路径。
关于文档实际格式的反馈应发送给 HOWTO 协调员 - 邮件发送至 linux-howto@metalab.unc.edu)。
《邮件用户指南》受版权保护 (c) 1999 Eric S. Raymond。保留版权是为了执行 Linux 文档项目许可条款。
未经作者许可,可以以任何物理或电子媒介复制或分发完整副本。如果翻译包含关于翻译者的声明,则同样允许在未经明确许可的情况下进行翻译。
在未经作者事先同意的情况下可以使用简短的引文。《邮件指南》的衍生作品和部分分发必须附带此文件的完整副本或指向完整副本的指针。
允许并鼓励商业再分发;但是,维护者将感谢收到任何此类分发的通知(作为一种礼貌)。
简而言之,我们希望通过尽可能多的渠道促进此信息的传播。但是,我们确实希望保留对 HOWTO 文档的版权。
我们进一步希望传播 HOWTO 中提供的所有信息。如果您有疑问,请联系 Linux HOWTO 协调员,地址为<linux-howto@metalab.unc.edu>.