17.5. 配置 elm

elm 代表 “electronic mail”(电子邮件),是名称相对合理的 Unix 工具之一。它提供了一个全屏界面,并具有良好的帮助功能。我们在此不讨论如何使用 elm,而只关注其配置选项。

理论上,您可以运行未配置的 elm,并且一切都运行良好——如果您幸运的话。但是,有一些选项必须设置,尽管它们只是偶尔需要。

启动时,elm 从以下位置读取一组配置变量elm.rc文件,位于/etc/elm。然后它尝试读取文件.elm/elmrc在您的主目录中。您通常不会自己编写此文件。当您从 elm 的选项菜单中选择“保存新选项”时,它会被创建。

私有elmrc文件的选项集也可在全局elm.rc文件中找到。您的私有elmrc文件中的大多数设置会覆盖全局文件中的设置。

17.5.1. 全局 elm 选项

在全局elm.rc文件中,您必须设置与您的主机名相关的选项。例如,在 Virtual Brewery,vlager 的文件包含以下内容
#
# The local hostname
hostname = vlager
#
# Domain name
hostdomain = .vbrew.com
#
# Fully qualified domain name
hostfullname = vlager.vbrew.com

这些选项设置了 elm 对本地主机名的理解。尽管此信息很少使用,但您应该设置这些选项。请注意,这些特定选项仅在全局配置文件中给出时才生效;如果在您的私有elmrc文件中找到,它们将被忽略。

17.5.2. 国家字符集

已经开发了一套标准和 RFC,以修改 RFC-822 标准,以支持各种类型的消息,例如纯文本、二进制数据、PostScript 文件等。这些标准通常被称为 MIME,或多用途互联网邮件扩展。除其他外,MIME 还让接收者知道在编写邮件时是否使用了标准 ASCII 以外的字符集,例如,使用法语重音符或德语变音符号。elm 在某种程度上支持这些字符。

Linux 内部用于表示字符的字符集通常被称为 ISO-8859-1,这是它所符合的标准的名称。它也被称为 Latin-1。任何使用此字符集中的字符的消息都应在其标头中包含以下行
Content-Type: text/plain; charset=iso-8859-1

接收系统应识别此字段,并在显示消息时采取适当的措施。 text/plain 消息的默认 charset 值为 us-ascii

为了能够显示具有 ASCII 以外字符集的消息,elm 必须知道如何打印这些字符。默认情况下,当 elm 收到带有charset字段不是 us-ascii 的消息(或者内容类型不是 text/plain),它会尝试使用名为 metamail 的命令显示消息。需要 metamail 显示的消息在概览屏幕的第一列中显示为 M

由于 Linux 的本机字符集是 ISO-8859-1,因此无需调用 metamail 即可显示使用此字符集的消息。如果告知 elm 显示器理解 ISO-8859-1,它将不会使用 metamail,而是直接显示消息。这可以通过在全局elm.rc:
displaycharset = iso-8859-1

中设置以下选项来启用。请注意,即使您永远不会发送或接收任何实际包含 ASCII 以外字符的消息,也应设置此选项。这是因为发送此类消息的人通常会配置他们的邮件程序以将正确的Content-Type字段默认放入邮件标头中,无论他们是否发送仅限 ASCII 的消息。

但是,在elm.rc中设置此选项是不够的。当使用其内置分页器显示消息时,elm 为每个字符调用一个库函数,以确定它是否可打印。默认情况下,此函数将仅识别 ASCII 字符为可打印字符,并将所有其他字符显示为^?。您可以通过将环境变量 LC_CTYPE 设置为 ISO-8859-1 来克服此功能,这会告诉库接受 Latin-1 字符为可打印字符。自 Linux 标准库的 4.5.8 版本以来,已提供对此功能和其他功能的支持。

当发送包含 ISO-8859-1 中的特殊字符的消息时,您应确保在elm.rc文件中设置另外两个变量
charset = iso-8859-1
textencoding = 8bit

这使得 elm 在邮件标头中将字符集报告为 ISO-8859-1,并将其作为 8 位值发送(默认是将所有字符剥离为 7 位)。

当然,我们在此处讨论的所有字符集选项也可以在私有elmrc文件中设置,而不是在全局文件中设置,以便个人用户可以拥有自己的默认设置,如果全局设置不适合他们。