在 Oracle® Solaris 11.2 中管理 sendmail 服务

退出打印视图

更新时间: 2014 年 7 月
 
 

软件组件

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

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

邮件用户代理

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

  • /usr/bin/mail

  • /usr/bin/mailx

邮件传输代理

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

  • 接受来自邮件用户代理的邮件

  • 解析目标地址

  • 选择正确的传送代理来传送邮件

  • 接收从其他邮件传输代理传入的邮件

本地传送代理

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

  • UUCP 本地传送代理,它使用 uux 传送邮件

  • 本地传送代理,它是标准 Oracle Solaris 发行版中的 mail.local

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

邮件程序与 sendmail

邮件程序是特定于 sendmail 的术语。sendmail 使用邮件程序来识别定制的本地传送代理或定制的邮件传输代理的特定实例。至少需要在 sendmail.cf 文件中指定一个邮件程序。有关任务信息,请参阅Chapter 2, 管理邮件服务中的更改 sendmail 配置。本节对以下两种类型的邮件程序进行了简短说明。

有关邮件程序的其他信息,请参见 http://www.sendmail.org/m4/readme.htmlhttp://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.htmlhttp://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(或其他)邮件连接,则会进一步增加复杂性。以下各节中的信息有助于理解邮件地址的各个部分及其复杂性。

域和子域

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

下表显示了一些顶层域。

表 3-6  顶层域
说明
com
商业站点
edu
教育站点
gov
美国政府机构
mil
美国军事机构
net
联网组织
org
其他非赢利组织

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

名称服务域名和邮件域名

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

  • 缺省情况下,sendmail 程序会从 NIS 域名中去除第一个组成部分,以形成邮件域名。例如,如果 NIS 域名为 bldg5.example.com,则其邮件域名将为 example.com

  • 尽管邮件域地址不区分大小写,但 NIS 域名会区分大小写。为了获得最佳结果,在设置邮件以及 NIS 域名时请使用小写字符。

  • DNS 域名和邮件域名必须相同。

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

邮件地址的典型格式

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

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

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

  • 有关其他邮件传输的路由信息(例如 bob::vmsvax@gatewaysmallberries%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)提供了为电子邮件地址创建别名的机制。因此,用户无需知道用户邮箱的准确本地名称。

下表显示了一些针对专用邮箱的常见命名约定。

表 3-7  针对邮箱名称格式的约定
格式
说明
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

邮件别名

别名是替代名称。对于电子邮件,可以使用别名来指定邮箱位置或定义邮件列表。有关任务列表,请参阅Chapter 2, 管理邮件服务中的管理邮件别名文件(任务列表)。另外,还可以参阅本章邮件别名文件

对于大型站点,邮件别名通常用来定义邮箱的位置。提供邮件别名类似于在有多个房间的大公司内为个人提供房间号作为地址的一部分。如果不提供房间号,邮件将传送至中心地址。如果没有房间号,则需要花费额外的精力来确定邮件传送到该建筑内的地址。因此,更容易出现错误。例如,在同一建筑内有两个人名为 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 aliases 映射或本地 /etc/mail/aliases 文件中创建供全局使用的邮件别名。另外,还可以创建和管理使用相同别名文件的邮件列表。

  • 根据邮件服务的配置,您可以通过使用 NIS 名称服务来管理别名,以维护全局 aliases 数据库。或者,也可以更新所有本地 /etc/mail/aliases 文件,以使别名保持同步。

  • 用户也可以创建和使用别名。用户可以在其本地 ~/.mailrc 文件(仅供该用户使用)或在本地 /etc/mail/aliases 文件(可供任何用户使用)中创建别名。用户通常不能创建或管理 NIS 别名文件。