本节还介绍了以下软件组件。
邮件用户代理是用户与邮件传输代理之间用作接口的程序。sendmail 程序是一个邮件传输代理。Solaris 操作系统提供了以下邮件用户代理。
/usr/bin/mail
/usr/bin/mailx
/usr/dt/bin/dtmail
邮件传输代理负责邮件的路由以及邮件地址的解析。此代理也称为邮件传输代理。用于 Solaris 操作系统的传输代理是 sendmail。该传输代理可执行以下功能。
接受来自邮件用户代理的邮件
解析目标地址
选择正确的传送代理来传送邮件
接收从其他邮件传输代理传入的邮件
本地传送代理是实现邮件传送协议的程序。Solaris 操作系统附带了以下本地传送代理。
UUCP 本地传送代理,它使用 uux 传送邮件
本地传送代理,它是标准 Solaris 发行版中的 mail.local
sendmail 版本 8.12 中的更改提供了有关以下相关主题的信息。
邮件程序是特定于 sendmail 的术语。sendmail 使用邮件程序来标识自定义的本地传送代理或自定义的邮件传输代理的特定实例。至少需要在 sendmail.cf 文件中指定一个邮件程序。有关任务信息,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。本节对以下两种类型的邮件程序进行了简短说明。
有关邮件程序的其他信息,请参见 http://www.sendmail.org/m4/readme.html 或 /etc/mail/cf/README。
SMTP 是在 Internet 中使用的标准邮件协议。此协议定义了以下邮件程序。
smtp,用于向其他服务器提供常规 SMTP 传输。
esmtp,用于向其他服务器提供扩展 SMTP 传输。
smtp8,用于向其他服务器提供 SMTP 传输,而不会将 8 位数据转换为 MIME。
dsmtp,用于通过使用 F=% 邮件程序标志来提供即时传送。 请参阅sendmail 版本 8.12 中对 MAILER() 声明的更改和sendmail 版本 8.12 中新增的传送代理标志 。
应尽可能避免使用 UUCP。有关说明,请参阅 http://www.sendmail.org/m4/uucp_mailers.html 或在 /etc/mail/cf/README 中搜索以下字符串:USING UUCP MAILERS。
UUCP 定义了以下邮件程序。
$=U 类中的名称将发送至 uucp-old。uucp 是此邮件程序的废弃名称。uucp-old 邮件程序在头中使用叹号地址。
$=Y 类中的名称将发送至 uucp-new。如果知道接收 UUCP 的邮件程序可在一次传输中管理多个收件人,请使用此邮件程序。suucp 是此邮件程序的废弃名称。uucp-new 邮件程序在头中也使用叹号地址。
如果配置中还指定了 MAILER(smtp),则还需定义另外两个邮件程序。
此邮件程序使用域样式地址,并且基本上应用 SMTP 重写规则。
$=Z 类中的名称将发送至 uucp-uudom。uucp-uudom 和 uucp-dom 使用相同的头地址格式,即域样式地址。
由于 smtp 邮件程序会修改 UUCP 邮件程序,因此在 .mc 文件中应始终将 MAILER(smtp) 放在 MAILER(uucp) 的前面。
邮件地址包含邮件传送到的收件人和系统的名称。管理不使用名称服务的小型邮件系统时,对邮件进行寻址很容易。登录名可以唯一标识用户。如果管理的邮件系统中存在多个具有邮箱的系统,或者该邮件系统有一个或多个域,则情况会变得很复杂。如果与网络之外的服务器之间建立了 UUCP(或其他)邮件连接,则会进一步增加复杂性。以下各节中的信息有助于理解邮件地址的各个部分及其复杂性。
电子邮件地址会使用域。域是用于网络地址命名的目录结构。一个域可以包含一个或多个子域。地址的域和子域与文件系统的分层结构类似。正如我们认为子目录位于其上面的目录之内,同样可以认为邮件地址中的每个子域位于其右侧的位置之内。
表 14–7 顶层域
域 |
说明 |
---|---|
com |
商业站点 |
edu |
教育站点 |
gov |
美国政府机构 |
mil |
美国军事机构 |
net |
联网组织 |
org |
其他非赢利组织 |
域不区分大小写。在地址的域部分中,可以使用大写、小写或大小写混合的字母,而不会产生任何错误。
使用名称服务域名和邮件域名时,请记住以下几点。
缺省情况下,sendmail 程序会从 NIS 或 NIS+ 域名中去除第一个组成部分,以形成邮件域名。例如,如果 NIS+ 域名为 bldg5.example.com,则其邮件域名将为 example.com。
尽管邮件域地址不区分大小写,但 NIS 或 NIS+ 域名会区分大小写。为了获得最佳结果,在设置邮件以及 NIS 或 NIS+ 域名时请使用小写字符。
DNS 域名和邮件域名必须相同。
有关更多信息,请参阅sendmail 与名称服务的交互。
通常,邮件地址具有以下格式。有关详细信息,请参阅与路由无关的邮件地址。
user@subdomain. ... .subdomain2.subdomain1.top-level-domain |
@ 符号左侧的地址部分是本地地址。本地地址可以包含以下内容。
有关其他邮件传输的路由信息(例如 bob::vmsvax@gateway 或 smallberries%mill.uucp@gateway)
别名(例如 iggy.ignatz)
接收邮件程序负责确定地址的本地部分的含义。有关邮件程序的信息,请参阅邮件程序与 sendmail。
@ 符号右侧的地址部分显示域的级别,它是本地地址驻留的位置。每个子域之间用点分隔。地址的域部分可以是一个组织、物理地区或地理区域。此外,域信息的顺序是分层的,即子域的本地性越明显,该子域距离 @ 符号越近。
邮件地址可以与路由无关。与路由无关的寻址要求电子邮件的发件人指定收件人的名称以及最终目标。高速网络(如 Internet)可使用与路由无关的地址。与路由无关的地址可以具有以下格式。
user@host.domain |
用于 UUCP 连接的与路由无关的地址可以具有以下地址格式。
host.domain!user |
随着计算机的域分层命名方案越来越受欢迎,与路由无关的地址也越来越普遍。实际上,最常见的与路由无关的地址会省略主机名,并依赖域名服务来正确标识电子邮件的最终目标。
user@domain |
通过搜索 @ 符号可首先读取与路由无关的地址。然后,从右(最高层)向左(@ 符号右侧的地址中最具体的部分)读取域分层结构。
邮箱是指作为电子邮件的最终目标的文件。邮箱的名称可以是用户名或特定功能的标识,如邮寄主管。邮箱位于 /var/mail/ username 文件中,该文件可以存在于用户的本地系统或远程邮件服务器上。在任一情况中,邮箱都位于邮件传送到的系统中。
应始终将邮件传送到本地文件系统,以便用户代理可从邮件缓冲池中提取邮件,并轻松将其存储在本地邮箱中。请勿使用已挂载 NFS 的文件系统作为用户邮箱的目标。具体来说,请勿将邮件定向至要从远程服务器挂载 /var/mail 文件系统的邮件客户机。在此情况下,应将用户的邮件发往到邮件服务器而非客户机主机名。已挂载 NFS 的文件系统会导致在邮件传送和处理中出现问题。
/etc/mail/aliases 文件和名称服务(如 NIS 和 NIS+)提供了为电子邮件地址创建别名的机制。因此,用户无需知道用户邮箱的准确本地名称。
下表显示了一些针对专用邮箱的常见命名约定。
表 14–8 针对邮箱名称格式的约定
从 sendmail 版本 8 开始,如果存在属主别名,则发送至组别名的邮件的信封发件人地址将更改为由属主别名扩展所得的地址。通过此更改,可将所有邮件错误都发送至别名属主,而不是返回给发件人。进行此更改后,用户会注意到,在传送发送至别名的邮件时,邮件看似来自别名属主。 以下别名格式有助于解决与此更改关联的一些问题。
mygroup: :include:/pathname/mygroup.list owner-mygroup: mygroup-request mygroup-request: sandys, ignatz |
在本示例中,mygroup 别名是组的实际邮件别名。owner-mygroup 别名用来接收错误消息。应将 mygroup-request 别名用于管理请求。此结构意味着,在发送至 mygroup 别名的邮件中,信封发件人地址会更改为 mygroup-request。
别名是替代名称。对于电子邮件,可以使用别名来指定邮箱位置或定义邮递列表。有关任务列表,请参阅第 13 章,邮件服务(任务)中的管理邮件别名文件(任务列表)。另外,还可以参阅本章中的邮件别名文件。
对于大型站点,邮件别名通常用来定义邮箱的位置。提供邮件别名类似于在有多个房间的大公司内为个人提供房间号作为地址的一部分。如果不提供房间号,邮件将传送至中心地址。如果没有房间号,则需要花费额外的精力来确定邮件传送到该建筑内的地址。因此,更容易出现错误。例如,在同一建筑内有两个人名为 Kevin Smith,则仅有其中一个人可获取该邮件。为改正此问题,每个 Kevin Smith 都应在其地址中添加一个房间号。
创建邮递列表时,请尽可能使用与域和位置无关的地址。要提高别名文件的可移植性和灵活性,请尽可能使邮递列表中的别名项可以通用并与系统无关。例如,如果域 example.com 中的系统 mars 上有一个名为 ignatz 的用户,则应创建别名为 ignatz@example 而非 ignatz@mars。如果用户 ignatz 更改了其系统名称但仍处于 example 域中,则无需更新别名文件即可反映系统名称的更改。
创建别名项时,请在每一行中键入一个别名。应该仅有一项包含用户的系统名称。例如,可为用户 ignatz 创建以下各项。
ignatz: iggy.ignatz iggyi: iggy.ignatz iggy.ignatz: ignatz@mars |
可为本地名称或域创建别名。例如,如果用户 fred 在系统 mars 中具有一个邮箱并且该用户位于域 planets 中,则 NIS+ 别名表中可包含该用户的别名项。
fred: fred@planets |
如果创建的邮件列表中包括域外面的用户,请使用用户名和域名来创建别名。例如,如果域 example.com 中的系统 privet 上有一个名为 smallberries 的用户,可创建别名为 smallberries@example.com。现在,向用户域之外发送邮件时,发件人的电子邮件地址会自动转换为全限定域名。
以下列表介绍了创建和管理邮件别名文件的方法。
可以创建在 NIS+ mail_aliases 表、NIS aliases 映射或本地 /etc/mail/aliases 文件中全局使用的邮件别名。另外,还可以创建和管理使用相同别名文件的邮递列表。
根据邮件服务的配置,可以通过使用 NIS 或 NIS+ 名称服务来管理别名,以维护全局 aliases 数据库。或者,也可以更新所有本地 /etc/mail/aliases 文件,以使别名保持同步。
用户还可以创建和使用别名。用户可以在其本地 ~/.mailrc 文件(仅供该用户使用)或在本地 /etc/mail/aliases 文件(可供任何用户使用)中创建别名。用户通常不能创建或管理 NIS 或 NIS+ 别名文件。