sendmail 命令
用途
为本地或网络传递路由邮件。
语法
sendmail [ -ba | -bd | -bD | -bh | -bH | -bi | -bm | -bp | -bs | -bv | -bt [ -Ac File] [ -C File ] [ -D Log File ] [ -d Value ] ] [ -B Type ] [ -F FullName ] [ -f Name ] [ -G] [ -h Number ] [ -i ] [ -Mx Value] [ -n ] [ -N Dsn ] [ -O Option=Value ] [ -o Option [ Value ] ] [ -pProtocol ] [ -q [Time] ] [ -qGname ] [ -qISubstr ] [ -qRSubstr ] [ -qSSubstr ] [ -R Return ] [ -r addr ] [ -t ] [ -V Envid ] ] [ -v ] [ -X LogFile ] Address
描述
- 从AIX 7.2 技术等级 5 开始,"sendmail命令使用版本为8.18.1 的 "sendmail命令。 sendmail 命令由新的
smmsp用户和smmsp组运行,而不是由根用户运行,以增强安全性。 - 在 "sendmail v8.7 及更高版本中,名称解析的顺序是域名系统 (DNS)、网络信息服务 (NIS)、网络接口服务 (NIS),然后是本地。 如果要覆盖默认顺序,请在 "/etc/netsvc.conf文件中指定一个顺序,或指定NSORDER环境变量。
sendmail 命令接收格式化文本消息并将它们发送到一个或更多的用户。 在网络上使用时,"sendmail命令会转换报文头信息格式,以符合目的地系统的要求。 sendmail程序通过地址的语法和内容确定目标系统的网络。
sendmail命令向以下用户发送信息:
- 本地系统的用户。
- 用户通过 TCP/IP 协议连接到本地系统。
- 用户使用基本网络实用程序 (BNU) 命令协议连接到本地系统。
sendmail命令仅用于发送预设格式的信息,而不是用户界面例程。 sendmail 命令从标准输入中读取消息文本。 在读取消息结束符时,sendmail 命令会将消息副本发送到所列出的所有地址。 消息结束符不是文件结束符(Ctrl-D)控制序列,也不是一行的句点。
sendmail 邮件过滤 API(Milter)
sendmail邮件过滤器 API 可在邮件处理过程中访问邮件信息。 这样,第三方程序就可以过滤元信息和内容。 使用 "sendmail邮件过滤器 API 开发的过滤器使用线程,因此可能需要更改过滤器中的每个进程限制。 例如,如果过滤器使用频繁,可使用 "setrlimit子程序来增加打开文件描述符的数量。
- 在 sendmail 配置中指定过滤器
- 使用关键字 X(表示外部)来指定过滤器。 以下是几个过滤器的示例:
Xfilter1, S=local:/var/run/f1.sock, F=RXfilter2, S=inet6:999@localhost, F=T, T=C:10m;S:1s;R:1s;E:5mXfilter3, S=inet:3333@localhost
sendmail 邮件过滤标志
- R
- 如果过滤器不可用,则拒绝连接。
- T
- 如果过滤器不可用,连接会暂时失败。
如果既未指定 F=R 也未指定 F=T ,则 sendmail 命令传递消息,就好像过滤器不存在一样。 分隔符是逗号(,)。
sendmail 邮件过滤器超时
T=x覆盖默认的sendmail超时,其中x可以取以下值::- C
- 连接到过滤器的超时(如果为 0,那么使用系统超时)。
- S
- 从邮件传输代理 (MTA) 向过滤器发送信息的超时。
- R
- 从过滤器读取回复的超时。
- E
- 从向过滤器发送结束信息到等待最终确认之间的总超时。
缺省值为: T=C:0m;S:10s;R:10s;E:5m
InputMailFilters选项决定启动的筛选器以及筛选器的排序方式:InputMailFilters=filter1, filter2, filter3这将根据 ".mc文件中 "INPUT_MAIL_FILTER命令的顺序自动设置。 您也可以通过在 ".mc文件中设置 "confINPUT_MAIL_FILTERS来重置该值。 该选项按指定的顺序调用三个筛选器。您可以在 ".mc文件中使用 "MAIL_FILTER()而不是 "INPUT_MAIL_FILTER()来定义过滤器,而无需将其添加到输入过滤器列表中。
InputMailFilters,则不使用筛选器。使用 sendmail 配置文件
- /etc/mail/sendmail.cf
- 当 sendmail 命令以 MTA 方式作为邮件服务器守护程序运行时,将使用此配置文件。 缺省情况下, sendmail.cf 文件使用 /var/spool/mqueue 目录中的邮件队列。 在系统引导时,缺省情况下会在 /etc/rc.tcpip 目录中启动 sendmail MTA 守护程序。 要手动启动 sendmail MTA 守护程序,请输入以下命令:
# startsrc -s sendmail -a " -bd -q30m" - /etc/mail/submit.cf
- 此配置文件由 sendmail 命令用于在 MSP 方式下运行。 缺省情况下, submit.cf 文件使用 /var/spool/clientmqueue 目录中的系统邮件队列。 sendmail 命令在以下场景下以 MSP 方式运行:
- 当 sendmail 命令在命令行运行时或由其他邮件工具 (例如 mail 命令) 调用以发送电子邮件时。
- 当 "sendmail命令作为客户队列运行程序被调用时。 sendmail 客户机队列运行器在 /var/spool/clientmqueue 目录中标识未传递的消息,并将这些消息提交到 sendmail MTA 守护程序以进行传递。 要在 MSP 模式下作为队列运行程序手动运行 "sendmail命令,请输入以下命令:
# /usr/lib/sendmail -Ac -q 30m
您还可以通过编辑 /etc/rc.tcpip 文件将 sendmail MTA 守护程序设置为每当系统引导时自动启动。 有关编辑 /etc/rc.tcpip 文件的指示信息,请参阅 在系统引导期间启动 sendmail 守护程序。
重启和刷新sendmail进程
sendmail 命令使用的配置文件是您可以使用任何文本编辑器编辑的文本文件。 在修改任何这些配置文件之后,必须重新启动或刷新 MTA 守护程序和 MSP 以使更改生效。
sendmail命令的当前进程标识存储在 /etc/mail/sendmail.pid 文件中。 要让 "sendmail命令重新读取新编辑的配置文件,请输入以下 "kill命令:
#kill -15 `head -1 /etc/mail/sendmail.pid`
如果 srcmstr 命令正在运行,那么可以运行 refresh 命令以再次构建配置数据库,别名数据库和 NLS 数据库:
#refresh -s sendmail
如果手动启动了 sendmail MSP ,并且如果 sendmail 进程不受 srcmstr 命令控制,那么可以使用以下 kill 命令来停止 sendmail 进程:
# kill <pid of the sendmail: Queue runner >
迁移至AIX 7.2,技术等级 4
如果运行的是AIX 7.2 技术等级 3 或更早版本,并且配置了 "sendmail命令,那么当迁移到AIX 7.2 技术等级 4 时,"sendmail命令将作为 MTA 守护进程运行。 要在开始迁移操作前备份 "sendmail.cf配置文件,请输入以下命令:
# cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.old
完成迁移操作后,会将先前的 sendmail.cf 配置文件传输到新的 sendmail.cf 配置文件。
- 要在迁移后找不到 sendmail.cf 文件时恢复 sendmail.cf 备份文件,请输入以下命令:
# cp /etc/mail/sendmail.cf.old /etc/mail/sendmail.cf - 要重启和刷新 "
sendmail进程,请输入以下命令:# startsrc -s sendmail -a " -bd -q30m"# refresh -s sendmail这些命令以 MTA 身份运行 sendmail 命令。
sendmail 命令将重新读取数据库并使用 sendmail.cf 配置文件继续操作。
定义别名
当 sendmail 命令处理本地邮件时,sendmail 命令允许您定义使用的别名。 别名是一种替代名称,可以用来代替详细的网络地址。 您也可以使用别名构建分发列表。
在 /etc/mail/aliases 文件中定义别名。 该文件是一个文本文件,您可以对其进行编辑。 sendmail 命令使用此文件的数据库版本。 在对 "/etc/mail/aliases文件所做的任何更改生效之前,必须通过运行 "sendmail-bi命令或 "newaliases命令建立一个新的别名数据库。
AIX上的Sendmail 8.11.0 支持伯克利数据库 (DB)。 sendmail命令将继续以数据库管理器(DBM)格式读取别名,直到重建别名数据库。 一旦重建,sendmail 将读取 Berkeley DB 格式的别名并将它们存储在 /etc/mail/aliases.db 文件中。
testalias的邮件发送失败,因为在存储第二行时,"TEST被转换为 "test。TEST: user@machine
testalias: TEST
每个系统都必须有一个指定为 "postmaster别名的用户或用户别名。 postmaster 别名的缺省值为一个 root 文件。 在 /etc/mail/aliases 文件中您可以将此别名指定给不同的用户。 postmaster别名允许系统外的其他用户向已知 ID 发送邮件,并获取向系统内用户发送邮件的信息。 您系统上的用户也可以将问题通知发送到 postmaster 标识。
sendmail 命令首先以散列样式别名文件的格式打开数据库。 如果失败或未编译 NEWDB 支持,该命令将打开一个新的数据库管理器 (NDBM) 数据库。 如果无法打开,那么 sendmail 命令会将别名源文件读入到它的内部符号表。
标志
| 项 | 描述 |
|---|---|
| -Ac 文件 | 指定 sendmail 命令以根据操作方式选择备用配置文件。 如果指定 -bm, -bs或 -t 标志,那么 sendmail 命令将使用 submit.cf 配置文件。 如果指定了任何其他标志,并且为了与较早版本兼容, sendmail 命令将使用 sendmail.cf 配置文件。 如果不指定文件变量,"sendmail命令默认使用 "submit.cf配置文件。 |
| -B类型 | 将主体类型设置为 type。 当前合法值为 7BI 或 8BITMIME。 注:-b 标志是互斥的。
|
| -ba | 在 ARPANET 模式下启动 sendmail 命令。 命令的所有输入行必须以回车符和换行符(CR-LF)结束。 sendmail 命令生成以 CR-LF 结尾的消息,并查看 From: 与 Sender: 字段来查找发送方的名称。 从 sendmail 命令版本 8.17.1 开始,该行为已更新为期望使用标准数据结束序列 (<CR><LF>.<CR><LF>),而不是非标准序列 (<LF>.<CR><LF>) 和 (<LF>.<LF>)。 |
| -bd | 启动 sendmail 命令使其像简单电子邮件传输协议(SMTP)邮件路由器一样作为守护程序在后台运行。 |
| -bD | 将 "sendmail命令作为守护进程启动,在前台作为 SMTP 邮件路由器运行。 |
| -bh | 显示持久主机状态数据库。 |
| -bH | 清除持久主机状态数据库。 |
| -bi | 根据 "/etc/mail/aliases文件中定义的信息建立别名数据库。 使用该标记运行 "sendmail命令与运行 "newaliases命令相同。 |
| -bm | 默认以常规方式发送邮件。 |
| -bp | 显示邮件队列列表。 使用该标记运行 "sendmail命令与运行 "mailq命令相同。 |
| -bs | 使用RFC821中描述的 SMTP 从标准输入中收集邮件。 此标志也包含所有与 SMTP 兼容的 -ba 标志的操作。 |
| -bt | 以地址测试方式启动 sendmail 命令。 此方式允许您输入交互式地址并在 sendmail 命令显示其分析地址所执行的步骤时进行监视。 在测试方式提示符下,输入一个规则集或用逗号分割的多个规则集并输入地址。 使用此方式来调试新配置文件中的地址分析规则。 |
| -bv | 启动 "sendmail命令,请求验证命令的地址参数字段中提供的用户 ID。 sendmail 命令返回一条消息作为响应,告诉哪些标识可由邮件程序解析。 它并不尝试收集或传递消息。 使用此模式验证用户标识、别名或邮递列表的格式。 |
| -C文件 | 使用File变量指定的其他配置文件启动 "sendmail命令。 在安装用作运行的配置文件的新配置文件之前,和 -bt 一起使用此标志来测试该文件。 |
| -D 日志文件 | 将调试输出发送至所指定的日志文件。 -D 选项必须在 -d 选项前面。 |
| -d 值 | 将调试值设置为 Value 变量所指定的值。 唯一有效的值是 "21.n,其中n是任何非零整数。 它产生有关地址分析的信息并且通常和 -bt 标志一起使用。
n 的更高值生成更多的详细信息。 使用此标志需要引导许可权。 |
| -F FullName | 将发送方的全名设置为 FullName 变量所提供的字符串。 |
| -f名称 | 设置发件人(邮件信封发件人)的名称。 如果在初始提交过程中 From: 头丢失,那么在该头中仍可以使用这个地址。 信封发件人地址被用作投递状态通知的收件人,也可能出现在 "Return-path:标头中。 只有受信任的用户(通常是 root、daemon 和 uucp)或您试图成为的用户与您本人相同时,才能使用此标记。 否则,将在报文中添加 "X-Authentication-Warning标头。 |
| -G | 消息的中继(网关)提交。 例如,当 rmail 命令调用 sendmail 命令时。 |
| -h 编号 | 将跳计数设置为 Number 变量所指定的值。 跳计数是 SMTP 路由器(不仅仅是 sendmail 命令的本地副本)所处理消息的次数。 邮件路由器每次处理邮件时都会递增跳数。 当它到达限制时,就会返回一条错误消息以在防止邮件系统中的无限循环。 |
| -i | 忽略入局消息的行中单独的点。 如果从文件中读取数据,则必须设置此项。 |
| -L | 将 "syslog信息中使用的标识符设置为所提供的标记。 |
| -M值 | 将宏 x 设置为指定的 Value。 |
| 代码-N | 将交付状态通知条件设置为数据源名称 (DSN)。 以下是交货状态通知条件:
|
| -n | 阻止 sendmail 命令解释别名。 |
| -O 选项=值 | 将 Option 设置为指定的 Value。 使用长格式选项名称。 |
| -o选项[值] | 设置 Option 变量。 如果选项是一个有值的选项,您也必须为 Value 变量指定一个值。 注:有关有效值,请参阅《性能工具指南和参考》中 "sendmail.cf文件中的 sendmail 命令选项
|
| -p协议 | 设置发送协议。 建议您设置此项。 可以 "Protocol:Host的形式设置协议,以同时设置发送协议和发送主机。 例如,"-pUUCP:uunet将发送协议设置为 UUCP,将发送主机设置为 "uunet。 一些现有的程序使用 -oM 标志设置 r 和 s 宏,它和使用 -p 标志是等效的。 |
| -qI子字符串 | 将进程作业限制为那些包含作为队列标识的 Substr。 |
| -qG 名称 | 队列中的处理工作只按名称分组。 |
| -qR子字符串 | 将进程作业限制为那些包含作为接收方之一的子串的 Substr。 |
| -qS子字符串 | 将进程作业限制为那些包含作为发送方的子串的 Substr。 |
| -q[时间] | 按照时间变量指定的时间间隔处理队列中保存的报文。 如果没有指定 Time 变量,那么该标志立即处理队列。 |
| -R返回 | 设置如果消息弹回要返回的消息的量。 Return 参数可以为 full 以表示返回整个信息或者为 hdrs 以表示仅能返回头部分。 |
| -r地址 | -f 的废弃格式。 |
| -t | 将消息发送到消息头的 To:、Cc: 以及 Bcc: 字段中指定的接收方,也可以发送到命令行中指定的任何用户。 |
| -V 恩维 | 设置原始包络标识。 它可以通过 SMTP 传播到支持 DSN 的服务器上,并且以 DSN 兼容的错误消息返回。 |
| -v | 以详细的方式启动 sendmail 命令。 sendmail 命令显示有关传输状态和别名扩展的消息。 |
| -XLogFile | 在LogFile中记录所有进出 "sendmail的流量,以便调试邮件程序问题。 请慎用此标记,因为它会迅速产生大量数据。 |
您也可以设置或除去 sendmail 配置处理选项。 负责邮件系统的人使用这些选项。 要设置这些选项,请使用命令行上的 "-o标志或配置文件 "/etc/mail/sendmail.cf中的 "O控制行。
退出状态
sendmail 命令返回退出状态值。 这些退出值在 /usr/include/sysexits.h 文件中定义。 下列表总结了这些返回值的含义:
| 项 | 描述 |
|---|---|
| EX_无法创建 | sendmail 命令不能创建用户指定的文件。 |
| EX_CONFIG | 在配置文件的格式中发现错误。 |
| EX_DATAERR | 某种方式下输入的数据不正确。 |
| EX_IOERR | 在 I/O 过程中产生错误。 |
| EX_NOHOST | sendmail命令可能无法识别指定的主机名。 |
| EX_无输入 | 输入文件(非系统文件)不存在或者不可读。 |
| EX_NOPERM | 用户没有执行所请求的操作的许可权。 |
| EX_无用户 | sendmail命令可能无法识别指定的用户 ID。 |
| EX_OK | sendmail 命令已成功完成。 |
| EX_OSERR | 出现一个临时操作系统错误。 这种错误的一个示例是创建一个新的进程失败。 |
| EX_OSFILE | 出现系统文件错误。 例如,"/etc/passwd等系统文件不存在、无法打开或有其他类型的错误导致无法使用。 |
| EX_PROTOCOL | 在协议交换过程中,远程系统返回一些不正确的东西。 |
| EX_软件 | 出现一个内部软件错误(包含错误的自变量)。 |
| EX_TEMPFAIL | sendmail命令可能无法创建与远程系统的连接。 稍后重新尝试请求。 |
| EX_不可用 | sendmail 命令所需的服务或资源不可用。 |
| EX_USAGE | 命令语法不正确。 |
安全性
审计活动
| 事件 | 信息 |
|---|---|
SENDMAIL_Config |
配置事件 |
SENDMAIL_ToFile |
创建文件事件 |
示例
要显示 sendmail 版本,请输入以下命令:
echo \$Z | sendmail -d0 显示与以下信息类似的信息:
Version AIX5.2/8.11.6p2
Compiled with: LDAPMAP MAP_REGEX LOG MATCHGECOS MIME7TO8 MIME8TO7
NAMED_BIND NDBM NETINET NETINET6 NETUNIX NEWDB NIS NISPLUS
QUEUE SCANF SMTP USERDB XDEBUG
============ SYSTEM IDENTITY (after readcf) ============
(short domain name) $w = dodgers
(canonical domain name) $j = dodgers.usca.ibm.com
(subdomain name) $m = usca.ibm.com
(node name) $k = dodgers
========================================================
Recipient names must be specified
# oslevel -r
5200-02
#文件
| 项 | 描述 |
|---|---|
| /usr/sbin/sendmail | 包含 "sendmail命令。 |
| /usr/sbinmailq/ | 包含邮件队列。 |
| /usr/sbin/newaliases | 包含别名数据库。 |
| /usr/sbin/mailstats | 包含 "/usr/lib/sendmail.st文件中的统计数据。 |
| /etc/mail/aliases | 包含 sendmail 命令别名的文字版。 |
| /etc/mail/aliases.db | 包含一个 Berkeley DB 格式的别名数据库。 |
| /etc/mail/aliases.dir | 包含一个 DBM 格式的别名数据库。 |
| /etc/mail/aliases.pag | 包含一个 DBM 格式的别名数据库。 |
| /etc/mail/sendmail.cf | 包含 sendmail 配置文件的文字版。 |
| /etc/mail/submit.cf | 包含 sendmail 配置文件的文字版。 如果此文件存在,那么会将此文件视为缺省配置文件。 |
| /etc/sendmail.st | 包含邮件路由的统计信息。 |
| /usr/lib/smdemon.cleanu | 维护 "/var/spool/mqueue目录下日志文件的老化副本。 |
| /var/spool/mqueue | 包含与邮件队列中的邮件相关联的临时文件和日志文件。 |
| /usr/bin/uux | 包含用于传递基本联网实用程序(BNU)的邮件程序命令。 |
| /usr/bin/bellmail | 包含用于传递本地邮件的邮件程序命令。 |