通常,您将使用邮件客户端界面(如 mail 或 mailx)或更复杂的界面(如 mutt、tkrat 或 pine)来编写邮件。这些程序被称为邮件用户代理,或 MUA。如果您发送邮件消息,界面程序在大多数情况下会将其交给另一个程序进行传递。这被称为邮件传输代理,或 MTA。在大多数系统上,同一个 MTA 用于本地和远程传递,并且通常作为 /usr/sbin/sendmail 调用,或者在不符合 FSSTND 标准的系统中作为 /usr/lib/sendmail 调用。在 UUCP 系统上,看到邮件传递由两个单独的程序处理是很常见的:rmail 用于远程邮件传递,lmail 用于本地邮件传递。
当然,本地邮件传递不仅仅是将传入的消息附加到收件人的邮箱中。通常,本地 MTA 理解别名(设置指向其他地址的本地收件人地址)和转发(将用户的邮件重定向到其他目标)。此外,无法传递的消息通常必须被退回,即连同一些错误消息一起返回给发送者。
对于远程传递,使用的传输软件取决于链路的性质。通过使用 TCP/IP 的网络传递的邮件通常使用简单邮件传输协议 (SMTP),这在 RFC-821 中进行了描述。SMTP 旨在将邮件直接传递到收件人的机器,与远程端的 SMTP 守护进程协商消息传输。如今,组织建立特殊的host来接受组织内收件人的所有邮件,并由该host管理到预期收件人的适当传递,这是一种常见的做法。
邮件通常不会在 UUCP 网络中直接传递,而是通过多个中间系统转发到目标主机。要通过 UUCP 链路发送消息,发送 MTA 通常使用 uux 在转发系统上执行 rmail,并在标准输入上向其馈送消息。
由于 uux 是为每条消息单独调用的,因此它可能会在主要的邮件hub上产生相当大的工作负载,并使 UUCP 假脱机队列中堆满数百个小文件,这些文件占用了不成比例的磁盘空间。[1] 因此,一些 MTA 允许您将多个发往远程系统的消息收集到一个批处理文件中。该批处理文件包含本地主机在使用直接 SMTP 连接时通常会发出的 SMTP 命令。这被称为 BSMTP,或批处理 SMTP。然后将该批处理馈送到远程系统上的 rsmtp 或 bsmtp 程序,该程序处理输入,几乎就像发生了正常的 SMTP 连接一样。
[1] | 这是因为磁盘空间通常以 1,024 字节的块为单位分配。因此,即使是几十字节的消息也会占用整整一个千字节。 |