设置电子邮件

作者:Jonathan Walther

在我使用 IRC (Internet Relay Chat) 的时间里,我发现新手遇到的头号问题是电子邮件设置,其次是 PPP 设置。 许多人把他们的电子邮件设置成半工作状态,然后就放在那里,因为害怕弄坏了又不知道如何修复。

邮件处理被分成几种类型的程序,而不是由单个程序处理所有事情(例如 Eudora)。 相信我,从概念上讲这很简单,一旦你理解了它,设置起来就非常快捷方便。 它还为你提供了很大的灵活性。

我包含了三个侧边栏,你可能希望先阅读它们; 特别是术语表,了解我将使用的术语的定义。 虽然有替代程序,但我将讨论我使用的程序。

术语表

先决条件

首先,您需要让您的 ISP 设置一个电子邮件帐户,并将邮件传递到他们的机器。 然后,您需要知道您的 ISP 的域名和您在邮件服务器上的密码(通常与您启动 PPP 时使用的密码相同)。 在本文的示例中,我们将 ISP 域名称为 foo.com,用户名称为 barney,密码称为 f00bar。

首先,您需要以下程序或它们的替代程序

  • pine [或 elm]

  • smail 或 sendmail

  • fetchpop [或 fetchmail]

  • procmail

要了解这些程序是否安装在您的系统上,请使用命令 which。 如果您在提示符下键入 which program,如果该程序存在于您的路径中,则该程序的路径名将返回到屏幕。 例如,which 可能会返回路径 /usr/bin/program,让您知道 program 位于 /usr/bin/ 目录中。 所有基本发行版(Slackware、Debian 和 Red Hat)通常都包含除 fetchpop 之外的所有这些程序,因此您应该可以轻松找到并安装它们。

fetchpop 源代码可以从 http://snakepit.wasteland.org/fetchpop.tgz 下载(特别感谢 TheAsp 将此预先修补的版本托管在他的服务器上,因此无需从 Sunsite 下载)。

Pine

在本例中,Pine 是您的 MUA(邮件用户代理)。 您可以使用它来阅读和编写邮件。 通过在提示符下键入 pine 来启动 pine。 当您看到打开屏幕时,键入 s 调用设置菜单,然后键入 c 进入配置屏幕。 现在执行以下步骤。

  1. enter 并键入您希望与您的实际电子邮件地址关联的个人姓名。 允许混合大小写和空格(例如,Barney Fallon)。 在这种情况下,其他人将看到您的地址为 Barney Fallon (barney@foo.com)。

  2. 将 smtp-server 设置为 localhost,以确保邮件被传递到您的本地 MTA(邮件传输代理),在那里您不必担心它。 然后,MTA 会在您下次连接时将其发送出去。 (请参阅术语表和通用邮件流侧边栏。)

  3. 暂时将其他选项设置为默认值。

要从提示符或脚本发送邮件,请键入

pine person@address.com < message.file
Smail/Sendmail

使用 smail 或 sendmail 作为 MTA(邮件传输代理)。 您可以使用它在机器之间传输邮件。 人们已经编写了 600 页的书籍来设置这些程序。 恐怖故事数不胜数。 对于这个简单的应用程序,在大多数情况下,您无需进行任何设置。 如果您使用 Slackware、Debian 或 Red Hat,则 smail 和 sendmail 的默认设置开箱即用。

某些安装脚本可能会询问您是否使用 smarthost,这意味着它会将邮件传递给您的 ISP 的邮件服务器,以便它可以进行传递。 这个决定取决于你。 没有太大的区别。 如果您计划在您的机器上接收邮件,您可能希望有一天查看 /etc/aliases 文件。

如果您的 ISP 上的用户名是 barney@foo.com,并且您希望此名称显示在 From: 标头中,请按照以下步骤使用 sendmail 处理它

  1. 在您的系统上创建一个名为 barney 的用户。

  2. 编辑以字符 #DM 开头的 /etc/sendmail.cf 文件行,将其更改为伪装域名 (DM—Domain Masquerade),例如 DMfoo.com。 如果您的机器有一个主机名,但没有域名(即,除了通过您的 ISP 之外,它没有联网),您可能还需要编辑行 #Dj$w.Foo.COM 以删除 # 并将 Foo.COM 更改为您的 ISP 的域名。 最后,如果希望您的 ISP 实际转发您的所有邮件,请编辑 DS 行以命名域名智能邮件主机。

  3. 进行并保存更改后,只需执行 SIGHUP<\!s>sendmail,以便 sendmail 重新读取 sendmail.cf 文件。

有时 smail 或 sendmail 会死掉。 然后您将收到一条 pine 错误消息,指出 SMTP 连接不可用。 如果发生这种情况,请以 root 用户身份登录并键入 smail -bdsendmail -bd。 如果这种类型的故障持续发生,首先要检查的是您的 /etc/rc* 目录,以确保您的 SMTP 服务器在启动时启动。

检查邮件

Sendmail 和 smail 包含两个非常方便的邮件检查程序

  • mailq 让你看到队列中的任何邮件(即,未发送)。 如果您未连接,您可以使用 mailq 检查队列并删除邮件(如果您决定不发送它)。

  • runq 给 smail 和 sendmail 一个“踢屁股”,开始发送出站队列中的邮件。 如果您的 sendmail 或 smail 设置为在某个指定的时间间隔发送邮件,并且您想更早地发送它,则此命令非常有用。 许多安装的默认时间间隔设置为 60 分钟。 并非所有发行版都包含 runq。 实现相同结果的另一种方法是在提示符下键入 sendmail<\!s>-q

Fetchpop

我选择 fetchpop 是因为我认为它是最容易设置的程序。 下载源代码(因为它没有随任何主要发行版一起提供),编译它并以 root 用户身份安装它。 如果您很勇敢,您可以从 Sunsite 下载它并自己应用补丁,但是前面给出的 URL 处的源代码已经应用了补丁,因此它对每个人都有效。 如果没有补丁,它将无法连接到某些 POP(邮局协议)服务器,但不会造成任何损坏。

现在,在没有参数的情况下运行 fetchpop。 (在下面的示例名称中替换您的个人信息。) Fetchpop 将提示您输入您的 POP 服务器。 输入 foo.com。 然后,它会询问您的用户名和密码。 输入 barney,然后输入 f00bar。 然后,Fetchpop 会将信息写入 ~/.fetchhost 文件。 然后,要获取您的邮件,请键入

fetchpop -arbp

在测试阶段,为了让自己确信它有效,只使用 -a 选项。 如果您使用 -r 选项,您获取的任何消息都将被删除。 -p 选项使 fetchpop 通过 procmail 过滤邮件。 如果没有 -p 选项,邮件将被转储到您的默认邮箱(请参阅邮箱侧边栏),/var/spool/mail/barney。

有关 fetchpop 的更多信息,请阅读手册页 - 它解释了很多其他细节。

Procmail

Procmail 是一个 MDA(邮件传递代理),用于“排序”电子邮件。 标准方法是 MTA 一次将一封邮件传递给 procmail,然后 procmail 检查其配置文件并根据邮件中的内容决定该做什么。 通常,它将它放在一个合适的邮箱中。 如果您是一位关心孩子的家长,您可以使用 procmail 将所有包含脏话的邮件定向到 /dev/null。 如果您进行了大量的黑客攻击,您可以设置 procmail,以便特殊的“触发”电子邮件将加密您的硬盘驱动器 - 一封包含代码字的快速电子邮件将锁定该盒子。 或者假设您收到一封来自重要人物的电子邮件; 来自特定地址的邮件可能会调用脚本在您的寻呼机上发出蜂鸣声。

要确保您的传入邮件通过 procmail 过滤,请创建一个名为 ~/.forward 的文件,其中包含以下行

|exec /usr/bin/procmail

然后,使用以下命令更改此文件的权限

chmod 644 ~/.forward
查看 sendmail 手册页,了解有关使用 ~/.forward 文件的其他详细信息。

通过在开头添加以下行来编辑 ~/.procmailrc

MAILDIR=$HOME/mail
DEFAULT=misc

默认的 misc 文件夹是接收未放入其他盒子的所有邮件的邮箱。 通常,这将是个人邮件。

让我们将我们的第一个“过滤器”放入文件中。 这是你最基本的“配方”

:0
* ^.*linux-kernel@vger.rutgers.edu
linux-kernel

让我们逐行分解它。

:0 表示新配方的开始。 每次您放入新的邮件排序规则时都必须使用它。

每条规则行必须以 *(星号)开头,后跟一个空格。 ^.*linux-kernel@vger.rutgers.edu 是什么意思? ^(插入符号)表示“在行首”。 .(句点)表示“匹配任何字符”。 * 表示匹配前面字符的任意数量。 因此,.* 表示匹配与以下字符不匹配的任意数量的字符。 linux-kernel@vger.rutgers.edu 是 Linux Kernel 邮件列表的名称。 总之,该规则匹配电子邮件标头中包含 linux-kernel@vger.rutgers.edu 的任何行 - 如果找到匹配项,可以肯定地说该电子邮件来自该邮件列表。 该规则对我来说已经有效了好几个月了。

现在,最后一行,linux-kernel,告诉 procmail,如果上面的规则匹配,则将该邮件存储在名为 linux-kernel 的邮箱中。

这很容易,对吧? 让我们再举一个例子。

:0
* ^Reply-To:.*mindanao-l@MINDANAO.COM
mindanao-list

与之前非常相似,除了从这个邮件列表中挑选邮件,我只需要查找标头的 Reply-To: 字段中具有 mindanao 地址的行。 如果我输入 * ^.*mindanao-l@MINDANAO.COM,我可能会发现抄送到该邮件列表的个人电子邮件也会发送到邮件列表邮箱而不是我的私人邮箱。

这是最后一个例子。 有时,需要两个单独的规则来排序来自一个邮件列表的所有邮件。 如果我对正则表达式有更多的了解,我可以轻松地将这两个规则浓缩为一个。 但我不是,所以这是它们

:0
* ^To:.*wmaker@eosys.com
WindowMaker
:0
* ^Cc:.*wmaker@eosys.com
WindowMaker

你能看到这些规则做什么吗? 它们确保所有具有以 To:Cc: 开头的行,并且该行中的其他位置包含 wmaker@eosys.com 的邮件都放入 WindowMaker 邮箱中。 查看 procmailrcprocmailex 的手册页以获取更多信息。

如果您已经有邮件并希望通过 procmail 过滤它以重新排序,请使用命令 catformail,如下所示

cat mailbox | formail -s procmail

如果您发现邮件已排序到错误的文件夹中,此命令非常方便。 收紧你的 ~/.procmailrc 文件中的“规则”(以与上面相同的方式),然后再次运行它。 例如,如果我在我的邮箱中找到应该已放入 debian-list 文件夹中的邮件,我输入

mv misc temp; cat temp|formail -s procmail
然后我可以检查 misc 文件,看看我是否收紧了规则,从而导致了正确的排序。

为了进行彻底的过滤,我建议你学习有效地使用正则表达式。一本极好的资源是O'Reilly & Associates 出版的 Mastering Regular Expressions,作者是Jeffrey E. F. Friedl,1997年出版。 egrep 的 man 手册可以为正则表达式提供快速参考。

结论

现在你应该能够在自己的 Linux 机器上发送、接收、排序、阅读和回复电子邮件了。 在此基础上,我建议你阅读 EMAIL-HOWTO,以及每个程序各自的 man 手册和文档。

一旦你的设置工作正常,试着尝试不同的程序。 procmail 有几个替代品,例如 delivermailagent。 你可以使用流行的程序 fetchmailpopclient 代替 fetchpop。 许多其他的 MUA,例如 mailelm,都运行良好。 为了替代 sendmail 或 smail,安装 qmail,由于其速度、可靠性和相对于 sendmail 的简单性,它非常受欢迎。

通用邮件流

邮箱

鸣谢

Setting Up E-mail
Jonathan Walther 喜欢在 MOO 上闲逛并编写各种小程序。 目前,他正在寻找任何入门级的 Unix 系统管理员/编码相关工作,希望在西加拿大他居住的地方。 他非常喜欢收到来自 krooger@kurgo.ml.org 的电子邮件。 在 IRC 和各种 MOO 上寻找 SirDibos。
加载 Disqus 评论