跳过导航链接 | |
退出打印视图 | |
在 Oracle Solaris 11.1 中管理 sendmail 服务 Oracle Solaris 11.1 Information Library (简体中文) |
MILTER(用于 sendmail 的邮件过滤器 API)
简单邮件传输协议 (Simple Mail Transfer Protocol, SMTP) 邮件程序
UNIX 对 UNIX 复制程序 (UNIX-to-UNIX Copy Program, UUCP) 邮件程序
sendmail 版本 8.13 支持运行 SMTP 时使用 TLS
sendmail 版本 8.13 中新增和修订的配置文件选项
sendmail 版本 8.13 中新增和修订的 FEATURE() 声明
sendmail 版本 8.12 中的配置文件 submit.cf
可区分 sendmail.cf 与 submit.cf 的功能
sendmail 版本 8.12 中新增的用于 PidFile 和 ProcessTitlePrefix 选项的参数
sendmail 版本 8.12 中新增和修订的 m4 配置宏
sendmail 版本 8.12 中对 FEATURE() 声明的更改
sendmail 版本 8.12 中对 MAILER() 声明的更改
sendmail 版本 8.12 中新增的用于传送代理的等式
邮件服务包括许多彼此交互的程序和守护进程。本节介绍了与管理电子邮件相关的文件、程序、术语和概念。
vacation 实用程序进行了增强,允许用户指定哪些传入邮件可以接收自动生成的回复。使用此增强功能,用户可以避免与不认识的人共享机密信息或联系人信息。来自垃圾邮件发件人或不认识的人的邮件将不会收到回复。
此项增强功能将收到的发件人电子邮件地址与 .vacation.filter 文件中的域列表或电子邮件地址列表进行比较。该文件由用户创建,并保存在用户的起始目录中。如果找到了匹配的域或电子邮件地址,则会发送回复。如果没有找到,则不发送回复。
.vacation.filter 可能包含以下类似项:
company.com mydomain.com onefriend@hisisp.com anotherfriend@herisp.com
请注意,每一行包含一个域或一个电子邮件地址。每项必须位于单独的一行中。要使发件人的电子邮件地址与某个电子邮件地址项匹配,除大小写之外,该匹配必须是精确匹配。发件人地址中的字母是大写还是小写将会忽略。要使发件人的电子邮件地址与某个域项匹配,该发件人的地址必须包含列出的域。例如,somebody@dept.company.com 和 someone@company.com 都可与域项 company.com 匹配。
有关更多信息,请参见 vacation(1) 手册页。
|
|
/etc/mail 目录中有一个子目录 cf,其中包含生成 sendmail.cf 文件所需的全部文件。表 3-9 中显示了 cf 的内容。
为支持只读的 /usr 文件系统,/usr/lib/mail 目录的内容已移至 /etc/mail/cf 目录。但是,请注意以下例外情况。Shell 脚本 /usr/lib/mail/sh/check-hostname 和 /usr/lib/mail/sh/check-permissions 现在位于 /usr/sbin 目录中。请参见用于邮件服务的其他文件。为了实现向下兼容,符号链接指向每个文件的新位置。
表 3-9 用于邮件服务的 /etc/mail/cf 目录的内容
|
表 3-10 /usr/lib 目录的内容
|
如表 3-11 所示,还有几个其他文件和目录可用于邮件服务。
表 3-11 用于邮件服务的其他文件
|
邮件服务由以下程序的组合提供,这些程序按图 3-2 的简图中所示进行交互。
图 3-2 邮件程序的交互
下面对邮件程序的交互进行了说明。
用户使用程序(如 mailx)发送邮件。有关更多信息,请参见 mailx(1) 手册页。
邮件由生成它的程序收集,然后传递给 sendmail 守护进程。
sendmail 守护进程解析邮件中的地址(将其划分为可识别的段)。该守护进程使用配置文件 /etc/mail/sendmail.cf 中的信息来确定网络名的语法、别名、转发信息和网络拓扑。通过使用此信息,sendmail 可以确定邮件要到达收件人所必须采用的路由。
sendmail 守护进程将邮件传递给相应系统。
本地系统中的 /usr/lib/mail.local 程序将邮件传送至邮件收件人在 /var/mail/ username 目录中的邮箱。
通知收件人邮件已到达,收件人使用 mail、mailx 或类似程序检索邮件。
sendmail 可以使用不同类型的通信协议,如 TCP/IP 和 UUCP。
sendmail 可以实现 SMTP 服务器、邮件排队和邮件列表。
sendmail 可以通过使用符合以下命名约定的模式匹配系统来控制名称解释。
基于域的命名约定。通过域技术可以区分物理命名和逻辑命名问题。有关域的更多信息,请参阅邮件地址。
临时技术,如提供对于其他网络中的主机而言看似位于本地的网络名。
任意(早期)命名语法。
完全不同的命名方案。
Oracle Solaris 操作系统使用 sendmail 程序作为邮件路由器。以下列表介绍了该程序的一些功能。
sendmail 负责接收电子邮件并将其传送给本地传送代理,如 mail.local 或 procmail。
sendmail 是一个邮件传输代理,用于接受来自用户代理(如 mailx 和 Mozilla 邮件)的邮件并通过 Internet 将其路由至目标。
sendmail 控制用户以下列方式发送的电子邮件:
确定收件人的地址
选择合适的传送程序
以传送代理可以处理的格式重写地址
根据需要重新格式化邮件头
最后将已转换的邮件传递给邮件程序以进行传送
有关 sendmail 程序的更多信息,请参阅以下主题。
sendmail 程序支持三种邮件重新路由机制。您选择的机制取决于涉及的更改类型。
服务器更改
域范围的更改
面向一个用户的更改
此外,您选择的重新路由机制还会影响所需要的管理级别。请考虑以下选项。
一种重新路由机制是别名。
根据使用的文件类型,别名可在服务器范围内或名称服务范围内将名称映射到地址。
请考虑名称服务别名的以下优点和缺点。
使用名称服务别名文件允许从单个源中管理邮件重新路由更改。但是传播重新路由更改时,名称服务别名会产生延迟时间。
名称服务管理通常限制为一组选定的系统管理员。普通用户将不能管理此文件。
请考虑使用服务器别名文件的以下优点和缺点。
通过使用服务器别名文件,指定的服务器上能够成为 root 的任何用户都可管理重新路由。
传播重新路由更改时,服务器别名会产生很短的延迟时间或消除延迟时间。
更改仅会影响本地服务器,这在大多数邮件都发送至一台服务器时可以接受。但是,如果需要将此更改传播至许多邮件服务器,请使用名称服务。
普通用户将不能管理此更改。
有关更多信息,请参阅本章邮件别名文件。有关任务列表,请参阅第 2 章中管理邮件别名文件(任务列表)。
第二种机制是转发。
通过此机制,用户可以管理邮件重新路由。本地用户可将其传入邮件重新路由至以下位置。
其他邮箱
不同的邮件程序
其他邮件主机
通过使用 .forward 文件可支持此机制。有关这些文件的更多信息,请参阅本章的.forward 文件。有关任务列表,请参阅第 2 章中管理 .forward 文件(任务列表)。
最后一种重新路由机制是包含。
通过此机制,用户可维护别名列表而不会要求 root 访问。要提供此功能,root 用户必须在服务器上的别名文件中创建相应的项。创建该项之后,用户即可根据需要重新路由邮件。有关包含的更多信息,请参阅本章/etc/mail/aliases 文件。有关任务列表,请参阅第 2 章中管理邮件别名文件(任务列表)。
注 - 读取邮件的程序(如 /usr/bin/mailx)可以有自己的别名,该别名在邮件到达 sendmail 之前会进行扩展。sendmail 的别名可以来自许多名称服务源,如本地文件或 NIS。查找顺序是由 svc:/system/name-service/switch 服务确定的。请参阅 nsswitch.conf(4)手册页。
sendmail 很可靠。该程序用于正确传送每封邮件。任何邮件都不会完全丢失。
sendmail 会尽可能使用现有软件进行传送。例如,用户会与邮件生成程序和邮件发送程序进行交互。提交邮件时,邮件生成程序会调用 sendmail,后者将邮件路由至正确的邮件程序。由于有些发送器可能是网络服务器,有些邮件程序可能是网络客户机,因此可将 sendmail 用作 Internet 邮件网关。有关该过程的更详细说明,请参见邮件程序的交互。
可将 sendmail 配置为用于包括多个网络的复杂环境。sendmail 会检查地址的内容及其语法,以确定要使用的邮件程序。
sendmail 使用配置文件来控制邮件配置,而不要求将该配置信息编译成代码。
用户可以维护各自的邮件列表。此外,各个用户还可以指定各自的转发机制,而无需修改域范围的别名文件,该文件通常位于由 NIS 维护的域范围别名中。
每个用户可以指定定制邮件程序,以处理传入邮件。定制邮件程序可以提供返回内容为 "I am on vacation." 等类似邮件的功能。有关更多信息,请参见 vacation(1) 手册页。
sendmail 可将地址批处理至单独一台主机,以减少网络通信流量。
配置文件控制 sendmail 执行其功能的方法。配置文件可确定要选择的传送代理、地址重写规则以及邮件头格式。sendmail 程序使用 /etc/mail/sendmail.cf 文件中的信息来执行其功能。
Oracle Solaris 操作系统在 /etc/mail 目录中提供了两个缺省配置文件。
submit.cf,用于在邮件提交程序模式而非守护进程模式下运行 sendmail 的配置文件。有关更多信息,请参阅sendmail 版本 8.12 中的配置文件 submit.cf。
设置邮件客户机、邮件服务器、邮件主机或邮件网关时,请考虑以下情况:
要设置邮件主机或邮件网关,需要设置邮件配置所需的中继邮件程序和中继主机参数。有关任务信息,请参阅第 2 章中设置邮件服务(任务列表)或更改 sendmail 配置。请注意,在 sendmail 版本 8.13 中,不再需要 main.cf 文件。
以下列表介绍了可以根据站点的要求来更改的一些配置参数。
时间值,用于指定以下信息。
读取超时。
将邮件返回给发件人之前,该邮件在队列中保持未传送状态的时间长度。请参阅sendmail 版本 8.12 中新增的队列功能。有关任务列表,请参阅管理队列目录(任务列表)。
传送模式,用于指定传送邮件的快速程度。
负荷限制,可在繁忙期间提高效率。这些参数可防止 sendmail 尝试传送大型邮件、向许多收件人传送邮件以及向已长时间关闭的站点传送邮件。
维护别名的方法取决于使用别名的用户以及需要可更改别名的用户。每种别名类型都具有唯一的格式要求。
如果要查找任务信息,请参阅第 2 章中管理邮件别名文件(任务列表)。
.mailrc 文件中列出的别名仅能由拥有该文件的用户进行访问。借助此限制,用户可以建立由其控制并且仅能由所有者使用的别名文件。.mailrc 文件中的别名遵循以下格式。
alias aliasname value value value ...
aliasname 是用户发送邮件时使用的名称,value 是有效的电子邮件地址。
如果用户为 scott 建立的个人别名在名称服务中与 scott 的电子邮件地址不匹配,则会出现错误。他人尝试回复此用户生成的邮件时,邮件会路由至错误的人员。唯一的解决方法是使用其他任一别名机制。
知道别名名称和包含该文件的系统的主机名的任何用户都可以使用 /etc/mail/aliases 文件中建立的任何别名。本地 /etc/mail/aliases 文件中的分发列表格式遵循以下格式。
aliasname: value,value,value ...
aliasname 是用户向此别名发送邮件时使用的名称,value 是有效的电子邮件地址。
如果网络未运行名称服务,则每个系统的 /etc/mail/aliases 文件都应包含用于所有邮件客户机的项。可以在每个系统中编辑该文件,也可在一个系统中编辑该文件,然后再将其复制到其他所有系统中。
/etc/mail/aliases 文件中的别名以文本形式存储。编辑 /etc/mail/aliases 文件时,需要运行 newaliases 程序。此程序将重新编译数据库并使别名可以二进制形式供 sendmail 程序使用。有关任务信息,请参阅第 2 章中如何设置本地邮件别名文件。
可以仅为本地名称(当前主机名或无主机名)创建别名。例如,如果用户 ignatz 在系统 saturn 中有一个邮箱,则 /etc/mail/aliases 文件中可包含该用户的以下别名项。
ignatz: ignatz@saturn
应为每台邮件服务器创建一个管理帐户。创建此类帐户的方法是在邮件服务器上为 root 指定一个邮箱并在 /etc/mail/aliases 文件中为 root 添加一项。例如,如果系统 saturn 是邮箱服务器,则可向 /etc/mail/aliases 文件中添加项 root: sysadmin@saturn。
通常,仅有 root 用户才能编辑此文件。另外,还可选择创建以下项。
aliasname: :include:/path/aliasfile
aliasname 是用户在发送邮件时使用的名称,/path/aliasfile 是包含别名列表的文件的全路径。该别名文件应包括电子邮件项(每行一项),并且不包括任何其他符号。
user1@host1 user2@host2
可在 /etc/mail/aliases 中定义附加的邮件文件,以保留日志或备份副本。以下项会将发送给 aliasname 的所有邮件都存储在 filename 中。
aliasname: /home/backup/filename
另外,还可以将邮件路由至其他进程。以下示例将邮件副本存储在 filename 中并列出副本。
aliasname: "|tee -a /home/backup/filename |lp"
有关任务列表,请参阅第 2 章中管理邮件别名文件(任务列表)>。
本地域中的所有用户都可以使用 NIS aliases 映射中的各项。原因是 sendmail 程序可以使用 NIS aliases 映射而非本地 /etc/mail/aliases 文件来确定邮件地址。 有关更多信息,请参阅 nsswitch.conf(4)手册页。
NIS aliases 映射中的别名遵循以下格式。
aliasname: value,value,value ...
aliasname 是用户发送邮件时使用的名称,value 是有效的电子邮件地址。
NIS aliases 映射应包含用于所有邮件客户机的各项。通常,只有 NIS 主服务器中的 root 用户才能更改这些项。对于经常更改的别名,最好不要选择此类型。但是,如果这些别名指向其他别名文件,则这类别名将很有用,如以下语法示例所示。
aliasname: aliasname@host
aliasname 是用户发送邮件时使用的名称,host 是包含 /etc/mail/alias 文件的服务器的主机名。
有关任务信息,请参阅第 2 章中如何设置 NIS mail.aliases 映射。
用户可在其起始目录中创建一个 .forward 文件,以供 sendmail 以及其他程序用于重定向邮件或发送邮件。请参阅以下主题。
有关任务列表,请参阅第 2 章中管理 .forward 文件(任务列表)。
以下列表介绍了可以避免或轻松解决问题的一些情况。
如果邮件未传送至预期的地址,请检查该用户的 .forward 文件。用户可能已将 .forward 文件放入了 host1 的起始目录,该文件会将邮件转发至 user@host2。当邮件到达 host2 时,sendmail 会在 NIS 别名中检查 user 并将邮件发回至 user@host1。此路由将产生循环以及更多退回的邮件。
要避免安全问题,请勿将 .forward 文件放在 root 和 bin 帐户中。如有必要,请改用 aliases 文件转发邮件。
要使 .forward 文件成为邮件传送中的有效部分,请确保正确应用以下控制(主要是权限设置)。
.forward 文件必须只能由文件所有者写入。此限制可以防止其他用户破坏安全性。
至起始目录的路径必须只能由 root 拥有和写入。例如,如果 .forward 文件位于 /export/home/terry 中,则 /export 和 /export/home 必须只能由 root 拥有和写入。
实际起始目录应只能由用户写入。
.forward 文件不能是符号链接,并且此文件不能包含多个硬链接。
可以创建 .forward. hostname 文件以重定向发送给特定主机的邮件。例如,如果用户的别名已从 sandy@phoenix.example.com 更改为 sandy@example.com,请在 sandy 的起始目录中放入一个 .forward.phoenix 文件。
% cat .forward.phoenix sandy@example.com "|/usr/bin/vacation sandy" % cat .vacation.msg From: sandy@example.com (via the vacation program) Subject: my alias has changed My alias has changed to sandy@example.com. Please use this alias in the future. The mail that I just received from you has been forwarded to my new address. Sandy
在本示例中,在通知发件人发生别名更改后,可将邮件转发至正确地址。由于 vacation 程序仅允许一个邮件文件,因此每次仅能转发一封邮件。但是,如果邮件不是特定于主机,则 .forward 文件可将一个休假邮件文件用于多台主机。
对转发机制的另一种扩展是 .forward+detail 文件。detail 字符串可以是除运算符字符之外的任意字符序列。运算符字符包括 .:%&!^[]+。通过使用此类型的文件,可以确定是否有其他人在您不知情的情况下使用您的电子邮件地址。例如,如果某个用户告诉其他人使用电子邮件地址 sandy+test1@example.com,该用户将能够识别将来传送给此别名的任何邮件。缺省情况下,将根据别名和 .forward+detail 文件对发送至 sandy+test1@example.com 别名的所有邮件进行检查。如果未找到任何匹配项,邮件将转而传送至 sandy@example.com,但用户可以看到 To: 邮件头中的更改。
此文件用于存储 sendmail 的启动选项,以免在升级主机时删除这些选项。可以使用以下变量。
选择要用于客户机守护进程的其他选项,该守护进程会查看仅客户机队列 (/var/spool/clientmqueue) 并可用作客户机队列运行器。不会进行任何语法检查,因此在更改此变量时请务必小心。
与 QUEUEINTERVAL 选项类似,CLIENTQUEUEINTERVAL 用于设置邮件队列运行的时间间隔。但是,CLIENTQUEUEINTERVAL 选项将控制客户机守护进程的功能而非主服务器守护进程的功能。通常,主服务器守护进程可将所有邮件都传送至 SMTP 端口。但是,如果邮件负荷过高或主服务器守护进程未运行,则邮件会进入仅客户机队列 /var/spool/clientmqueue。然后,检查仅客户机队列的客户机守护进程将用作客户机队列处理器。
可使 SMTP 客户机和服务器立即交互,而无需等待达到队列运行间隔,该间隔是周期性的。服务器可以立即传送队列中转至指定主机的部分。有关更多信息,请参阅 etrn(1M) 手册页。
选择用于启动 sendmail 的模式。使用 -bd 选项或不予以定义。
选择要用于主服务器守护进程的其他选项。不会进行任何语法检查,因此在更改此变量时请务必小心。
设置邮件队列在主服务器守护进程中的运行间隔。# 可以是一个正整数,后跟 s(秒)、m(分钟)、h(小时)、d(天)或 w(星期)。在启动 sendmail 之前会先检查语法。如果间隔为负或者该项不是以合适字母结尾,则会忽略该间隔,sendmail 将以 15 分钟的队列间隔启动。
启用一个在队列运行间隔之间休眠的持久性队列运行器,而不是为每个队列运行间隔启用一个新队列运行器。可将此选项设置为 p,这是唯一可用的设置。否则,将不设置此选项。