系统管理指南:网络服务

软件组件

每种邮件服务都至少包括以下软件组件之一。

本节还介绍了以下软件组件。

邮件用户代理

邮件用户代理是用户与邮件传输代理之间用作接口的程序。sendmail 程序是一个邮件传输代理。Solaris 操作系统提供了以下邮件用户代理。

邮件传输代理

邮件传输代理负责邮件的路由以及邮件地址的解析。此代理也称为邮件传输代理。用于 Solaris 操作系统的传输代理是 sendmail。该传输代理可执行以下功能。

本地传送代理

本地传送代理是实现邮件传送协议的程序。Solaris 操作系统附带了以下本地传送代理。

sendmail 版本 8.12 中的更改提供了有关以下相关主题的信息。

邮件程序与 sendmail

邮件程序是特定于 sendmail 的术语。sendmail 使用邮件程序来标识自定义的本地传送代理或自定义的邮件传输代理的特定实例。至少需要在 sendmail.cf 文件中指定一个邮件程序。有关任务信息,请参阅第 13 章,邮件服务(任务)中的生成 sendmail.cf 配置文件。本节对以下两种类型的邮件程序进行了简短说明。

有关邮件程序的其他信息,请参见 http://www.sendmail.org/m4/readme.html/etc/mail/cf/README

简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 邮件程序

SMTP 是在 Internet 中使用的标准邮件协议。此协议定义了以下邮件程序。

UNIX 对 UNIX 复制程序 (UNIX-to-UNIX Copy Program, UUCP) 邮件程序

应尽可能避免使用 UUCP。有关说明,请参阅 http://www.sendmail.org/m4/uucp_mailers.html 或在 /etc/mail/cf/README 中搜索以下字符串:USING UUCP MAILERS

UUCP 定义了以下邮件程序。

uucp-old

$=U 类中的名称将发送至 uucp-olduucp 是此邮件程序的废弃名称。uucp-old 邮件程序在头中使用叹号地址。

uucp-new

$=Y 类中的名称将发送至 uucp-new。如果知道接收 UUCP 的邮件程序可在一次传输中管理多个收件人,请使用此邮件程序。suucp 是此邮件程序的废弃名称。uucp-new 邮件程序在头中也使用叹号地址。

如果配置中还指定了 MAILER(smtp),则还需定义另外两个邮件程序。

uucp-dom

此邮件程序使用域样式地址,并且基本上应用 SMTP 重写规则。

uucp-uudom

$=Z 类中的名称将发送至 uucp-uudomuucp-uudomuucp-dom 使用相同的头地址格式,即域样式地址。


注 –

由于 smtp 邮件程序会修改 UUCP 邮件程序,因此在 .mc 文件中应始终将 MAILER(smtp) 放在 MAILER(uucp) 的前面。


邮件地址

邮件地址包含邮件传送到的收件人和系统的名称。管理不使用名称服务的小型邮件系统时,对邮件进行寻址很容易。登录名可以唯一标识用户。如果管理的邮件系统中存在多个具有邮箱的系统,或者该邮件系统有一个或多个域,则情况会变得很复杂。如果与网络之外的服务器之间建立了 UUCP(或其他)邮件连接,则会进一步增加复杂性。以下各节中的信息有助于理解邮件地址的各个部分及其复杂性。

域和子域

电子邮件地址会使用域。是用于网络地址命名的目录结构。一个域可以包含一个或多个子域。地址的域和子域与文件系统的分层结构类似。正如我们认为子目录位于其上面的目录之内,同样可以认为邮件地址中的每个子域位于其右侧的位置之内。

下表显示了一些顶层域。

表 14–7 顶层域

域 

说明 

com

商业站点 

edu

教育站点 

gov

美国政府机构 

mil

美国军事机构 

net

联网组织 

org

其他非赢利组织 

域不区分大小写。在地址的域部分中,可以使用大写、小写或大小写混合的字母,而不会产生任何错误。

名称服务域名和邮件域名

使用名称服务域名和邮件域名时,请记住以下几点。

有关更多信息,请参阅sendmail 与名称服务的交互

邮件地址的典型格式

通常,邮件地址具有以下格式。有关详细信息,请参阅与路由无关的邮件地址


user@subdomain. ... .subdomain2.subdomain1.top-level-domain

@ 符号左侧的地址部分是本地地址。本地地址可以包含以下内容。


注 –

接收邮件程序负责确定地址的本地部分的含义。有关邮件程序的信息,请参阅邮件程序与 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 针对邮箱名称格式的约定

格式 

说明 

username

用户名通常与邮箱名称相同。 

Firstname.Lastname Firstname_Lastname Firstinitial.Lastname Firstinitial_Lastname

可将用户名标识为用点(或下划线)分隔名和姓的全名。或者,也可以通过用点(或下划线)分隔首字母和姓来标识用户名。 

postmaster

用户可以向 postmaster 邮箱发送并报告邮件系统的问题。每个站点和域都应该有一个 postmaster 邮箱。

MAILER-DAEMON

sendmail 会自动将发往 MAILER-DAEMON 的所有邮件路由至邮寄主管。

aliasname-request

-request 结尾的名称是分发列表的管理地址。此地址应将邮件重定向至维护分发列表的人员。

owner-aliasname

owner- 开头的名称是分发列表的管理地址。此地址应将邮件重定向至处理邮件错误的人员。

owner-owner

当不存在错误返回到的 owner-aliasname 别名时,可使用此别名。此地址应将邮件重定向至处理邮件错误的人员。在维护大量别名的所有系统中,也都应定义此地址。

local%domain

百分比符号 (%) 用来标记邮件到达其目标时扩展的本地地址。大多数邮件系统都会将带有 % 符号的邮箱名称解释为完整邮件地址。% 将用 @ 替换,并相应地重定向邮件。尽管许多人都使用 % 约定,但此约定并不是正式标准。此约定称为“percent hack”。通常可以使用此功能来帮助调试邮件问题。

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。现在,向用户域之外发送邮件时,发件人的电子邮件地址会自动转换为全限定域名。

以下列表介绍了创建和管理邮件别名文件的方法。