sendmail.cf 和 submit.cf 文件
用途
包含用于 发送邮件 命令的配置信息。
描述
/etc/mail/sendmail.cf 配置文件和 /etc/mail/submit.cf 配置文件包含 sendmail command.These 文件包含诸如主机名和域以及 sendmail 规则集之类的信息。
配置文件会执行以下功能:
- 存储有关正在运行的邮件程序类型的信息。
- 定义 发送邮件 命令如何重写消息中的地址。
- 定义 发送邮件 命令在以下环境中的运行方式:
- 本地邮件传递
- 使用 TCP/IP 的局域网传送
- 使用基本实用程序网络 (BNU) 进行远程交付
如果您的环境仅包含这些类型的邮件传递,那么可以使用提供的 /etc/mail/sendmail.cf 文件或 /etc/mail/sendmail.cf 文件 (如果有) 进行少量更改。
控制行
配置文件由一系列控制行组成,每个控制行都以单个字符开头,用于定义行的其余部分的使用方式。 以空格或制表符开头的行是连续行。 空白行和以 # (井号) 开头的行是注释。 用于定义以下内容的控制行:
下面详细讨论了这些控制线路类型中的每一种。
重写规则
发送邮件 命令接收许多不同格式的地址,因为不同的邮件程序使用不同的格式来传递邮件消息。 发送邮件 命令将地址更改为路由正在使用的邮件程序的消息所需要的格式。 要执行此转换, 发送邮件 命令将使用配置文件中定义的一组重写规则 (即 规则集)。 重写规则具有以下格式:
Snumber
Rbefore after
其中number是大于或等于零的整数,指示这是哪个规则集,并且before和after是表示特定字符模式的符号表达式。 以以下项开头的行:R表示重写表达式before因此,它与表达式具有相同的格式after. Sendmail 将扫描一组重写规则,以查找规则左侧 (LHS) 的匹配项。 当规则匹配时,地址将替换为该规则的右侧 (RHS)。
使用 sendmail 命令安装的 /etc/mail/sendmail.cf 和 /etc/mail/submit.cf 文件包含足够的规则来使用域地址结构对 BNU 和 TCP/IP 网络执行转换。 除非连接到使用其他寻址方案的系统,否则您不应该更改这些规则。
读取配置文件时,会执行格式为 $x 的宏扩展。 形式为 $&x 的扩展在运行时执行,采用的算法通用性稍弱。 此表单仅用于引用内部定义的宏,例如在运行时更改的 $h。
重写规则的左手侧 (LHS)
重写规则的左边包含一个模式。 普通单词简单直接匹配。 元语法是使用美元符号引入的。 元符号为:
| 元符号 | 含义 |
|---|---|
| $* | 匹配零个或多个标记 |
| $+ | 匹配一个或多个标记 |
| $- | 正好匹配一个标记 |
| $=X | 与类 X 中的任何短语匹配 |
| $~X | 与类 X 中不存在的任何单词匹配 |
如果有任何这些匹配项,那么会将其分配给符号 $N 以在右侧进行替换,其中 N 是 LHS 中的索引。 例如,如果是 LHS:
$-:$+
将应用于输入:
UCBARPA:linda
规则将匹配,并且传递给 RHS 的值将为:
$1 UCBARPA
$2 linda
重写规则的右手端 (RHS)
当重写规则的左侧匹配时,输入将被删除,并替换为右侧。 除非标记以美元符号开头,否则将直接从 RHS 复制这些标记。 元符号为:
| 元符号 | 含义 |
|---|---|
| $n | 从 LHS 替换不确定标记 N |
| $[名称$] | Canonicize 名称 |
| $(map key$@参数 $:缺省值 $) | 广义键控映射函数 |
| $>n | "调用" 规则集 N |
| $#邮件程序 | 解析为邮件程序 |
| $@主机 | 指定主机 |
| $:用户 | 指定用户 |
$n 语法会替换 LHS 上的 $+, $-, $*, $=或 $~ 匹配项中的相应值。 它可以在任何地方使用。
将在主机数据库中查找包含在 $[和 $] 之间的主机名,并将其替换为规范名称。 例如, $[merlin] 可能变为 merlin.magician , $[[128.32.130.2]$] 将变为 king.arthur。
$( ... $) 语法是更通用的查找形式; 它使用指定映射而不是隐式映射。 如果找不到查找,那么将插入指示的缺省值; 如果未指定缺省值,并且没有查找匹配项,那么该值保持不变。 参数将传递到映射以进行可能的使用。
$> n 语法导致行的剩余部分像往常一样被替换,然后作为参数传递到规则集 n。 然后,规则集 n 的最终值将成为此规则的替代项。 $> 语法只能在右手边的开头使用; 只能在前面加上 $@ 或 $:。
仅应在规则集零或规则集零的子例程中使用 $# 语法。 它会导致规则集评估立即终止,并向 发送邮件 发出信号,表明地址已完全解析。 完整语法为:
$#mailer $@host $:user
这指定指导邮件程序所必需的 {mailer, host, user} 3 元组。 如果邮件程序是本地的,那么可以省略主机部分。 邮件程序必须是单个字,但主机和用户可能是多部分的。 如果邮件程序是内置的 IPC 邮件程序,那么主机可能是一个冒号分隔的主机列表,按顺序搜索第一个工作地址,与 MX (机器交换) 记录完全相同。 稍后,用户将由特定于邮件程序的包络重写集重写并分配给 $u 宏。 作为一种特殊情况,如果 $# 的值为 "local" ,并且 $: value 的第一个字符为 "@" ,那么将除去 "@" ,并且在地址描述符中设置一个标志,导致 发送邮件 不执行规则集 5 处理。
通常,将重试匹配的规则,即,规则循环至失败为止。 RHS 也可能以 $@ 或 $: 开头,以更改此行为。 $@ 前缀会导致规则集返回以 RHS 的其余部分作为值。 $: prefix 会导致规则立即终止,但规则集会继续; 这可用于避免继续应用规则。 在继续之前将除去前缀。
R$+ $: $>7 $1匹配任何内容,将其传递到规则集 7 ,然后继续; $: 是避免无限循环所必需的。
按所描述的顺序进行替换; 即,替换来自 LHS 的参数,规范主机名,调用 "子例程" ,最后处理$#, $@ 和 $:。
重写规则集的语义
有五个重写集具有特定语义。
local-part@host-domain-spec在对任何地址执行任何操作之前,规则集 3 由 发送邮件 应用。
如果未指定 "@" 符号,那么可以从发送方地址附加主机域规范 ("Rewrite set 语义" 中的框 "D") (如果在对应于发送邮件程序的邮件程序定义中设置了 C 标志)。
规则集零在规则集 3 之后应用于将实际指定收件人的地址。 它必须解析为 {mailer, host, user} 三元组。 必须在配置文件中的邮件程序定义中定义此邮件程序。 主机已定义到 $h 宏中,以便在指定邮件程序的 argv 扩展中使用。
IPC 邮件程序
如果规则集零解析为 IPC 邮件程序 (即,将 "[IPC]" 列为 M 配置行中的路径的邮件程序) ,那么会发生一些特殊处理。 在 "$@" 之后传递的主机名已执行 MX 扩展; 这将在 DNS 中查找名称以查找备用交付站点。
主机名也可以作为点分四元组提供 (括在方括号中); 例如:
[128.32.149.78]
这会导致将数字值直接转换为 TCP/IP 主机地址。
在 "$@" 后面传递的主机名也可能是一个以冒号分隔的主机列表。 每个都单独进行 MX 扩展,并将结果合并以生成 (基本上) 一个长的 MX 列表。 此处的意图是创建未在专用内部网络的 DNS 中发布的 "伪" MX 记录。
[any.internet.addr]sendmail.cf 文件和 submit.cf 文件中的宏
/etc/mail/sendmail.cf 文件和 /etc/mail/submit.cf 文件中的宏由 sendmail 命令解释。 宏是一个符号,表示一个值或字符串。 宏由以下项定义:D/etc/mail/sendmail.cf 文件和 /etc/mail/submit.cf 文件中的命令。
D-定义宏
在 {braces}中使用单个字符或单词对宏进行命名。 可以从整个 ASCII 集合中选择单字符名称,但用户定义的宏应该仅从大写字母集合中进行选择。 内部使用小写字母和特殊符号。 以小写字母或标点字符开头的长名称将保留供 发送邮件使用,因此用户定义的长宏名称应以大写字母开头。
Dxval其中x是宏的名称 (可能是单个字符或花括号中的单词) ,并且val是它应该具有的值。 在宏值中应该没有实际属于该值的空格。
宏是使用构造 $x 进行内插的,其中 x 是要内插的宏的名称。 此插值是在读取配置文件时完成的,但在 M 行中除外。 特殊构造 $&x 可用于 R 行中实现延迟插值。
$?x text1 $| text2 $.如果设置了宏 $x ,那么将插入 text1 ,否则将插入 text2 。 可省略 "else" ($|) 子句。
小写宏名称保留为具有特殊语义,用于在 发送邮件内或外传递信息,并且保留特殊字符以提供条件,以此类推。 大写名称 (即, $A 到 $Z) 专门保留给配置文件作者。
发送邮件 在内部定义和/或使用以下宏,以将其插值到 argv 的邮件程序或其他上下文中。 标记为 - 的宏是传递到 发送邮件的信息,标记为 = 的宏是输入和输出 发送邮件的信息,未标记的宏是传递到 发送邮件 的宏,否则不会在内部使用:
| 宏 | 定义 |
|---|---|
| $_ | RFC1413-validation 和 IP 源路由 (V8.1 及更高版本)。 |
| $a | RFC822 格式的原始日期。 |
| ${auth_authen} | 客户机的认证凭证由认证确定 (仅当成功时才设置)。 格式取决于所使用的机制,它可能只是 user, user@realm或类似的 (仅限 SMTP AUTH)。 |
| ${auth_author} | 授权身份,即 SMTP MAIL 命令的 AUTH=parameter (如果提供)。 |
| ${alg_bits} | 用于 TLS 连接的对称加密算法的最大密钥长度 (以位为单位)。 这可能小于用于导出受控算法的有效密钥长度 (存储在 ${cipher_bits}中)。 |
| ${addr_type} | 这是当前正在重写的地址的类型。 此宏最多包含三个字符,第一个是 E 或 H (表示包络/头地址) ,第二个是空格,第三个是 S 或 R (表示发送方/接收方地址)。 |
| ${auth_type} | 用于 SMTP 认证的机制 (仅在成功时设置)。 |
| $b | 当前日期,格式为 RFC822 。 |
| $(bodytype) | ESMTP BODY 参数。 |
| 2 亿美元 | BITNET 中继设备。 |
| $c | 中继段计数。 |
| $(客户端地址) | 连接主机的 IP 地址。 |
| ${cert_issuer} | 签署提供的证书 (证书颁发者) 的 CA (认证中心) 的 DN (专有名称) (仅限 STARTTLS)。 |
| ${cert_md5} | 提供的证书的 MD5 散列 (仅限 STARTTLS)。 |
| $(客户机名称) | 连接主机的规范名称。 |
| $(客户机端口) | 连接主机的端口名称。 |
| $(客户端解析) | 用于保存 $(客户机名称)的解析调用的结果。 |
| ${cert_subject} | 提供的证书的 DN (称为证书主体集) (仅限 STARTTLS)。 |
| $(currHeader) | 头值作为括在引号内的字符串。 |
| ${cipher} | 用于连接的密码套件,例如, EDH-DSS-DES-CBC3-SHA, EDH-RSA-DESCBC-SHA , DES-CBC-MD5和 DES-CBC3-SHA (仅适用于 STARTTLS)。 |
| ${cipher_bits} | 用于 TLS 连接的对称加密算法的有效密钥长度 (以位为单位)。 |
| ${client_connections} | SMTP 服务器中用于客户机 IP 地址的打开连接数。 |
| ${client_flags} | ClientPortOptions的 Modifier= 部分指定的标志,标志之间用空格隔开,大写标志加倍。 也就是说,"Modifier=hA在 ${client_flags}中表示为 "h AA,这是测试规则集中的标志所必需的。 |
| ${client_ptr} | 对客户机 IP 地址进行 PTR 查找的结果。 注: 这与 ${client_name} 相同 (如果且仅当 ${client_resolve} 为 "正常" 时)。 这仅在 SMTP 服务器中定义。
|
| ${client_rate} | 在ConnectionRateWindowSize 指定的时间间隔内,客户端 IP 地址的传入连接数。 |
| ${client_resolve} | 用于保存 ${client_name}的解析调用的结果。 可能的值为:
|
| ${cn_issuer} | 对提供的证书进行签名的 CA 的 CN (公共名称) (仅限 STARTTLS)。 注: 如果无法正确抽取 CN ,那么会根据迂到的错误将其替换为下列其中一个字符串:
在最后一个案例中,发生了一些其他 (非特定) 错误。 |
| ${cn_subject} | 所提供证书的 CN (公共名称) (仅限 STARTTLS)。 请参阅 ${cn_issuer} 以了解可能的替换项。 |
| ${currHeader} | 头值为括在引号内的字符串 (可能截断为 MAXNAME)。 此宏仅在头检查规则集中可用。 |
| $C | DECnet 中继设备的主机名 (m4 技术)。 |
| enrealThe 当前日期,采用 UNIX (ctime) (3) 格式。 | |
| $(守护进程地址) | 守护程序侦听连接时所使用的 IP 地址。 除非设置了DaemonPortOptions,否则将是 "0.0.0.0。 |
| $(守护进程家族) | 如果守护程序正在接受网络连接,那么这是网络系列。 |
| $(守护进程标志) | DaemonPortOptions中 Modifiers= 部分指定的守护进程标志,标志之间用空格隔开,大写标志加倍。 |
| $(守护进程信息) | 有关作为文本字符串的守护程序的信息。 例如, SMTP+queueing@00。 |
| $(守护进程名称) | DaemonPortOptionsName= 子选项中的守护进程名称。 如果未使用此子选项,那么缺省值将设置为守护程序#,其中 # 是守护程序编号。 |
| $(守护进程端口) | 守护程序接受连接时所使用的端口。 除非设置了 DaemonPortOptions ,否则这很可能设置为缺省值 25。 |
| $(deliveryMode) | 发送邮件使用的当前交付方式。 |
| $e | 已过时。 改用SmtpGreetingMessage选项。 |
| $(envid) | 原始 DSN 包络标识。 |
| $E | X400 中继设备 (未使用) (m4 技术)。 |
| $f | 发件人的地址。 |
| $F | FAX 中继设备 (m4 技术)。 |
| $g | 发送方相对于接收方的地址。 |
| $h | 收件人地址的主机部分。 |
| ${hdrlen} | 存储在 ${currHeader} 中的头值的长度 (在可能的截断之前)。 如果此值大于或等于 MAXNAME ,那么表示头已被截断。 |
| ${hdr_name} | 已针对其调用当前头检查规则集的头字段的名称。 这对于用于获取头名称的缺省头检查规则集很有用; 宏仅在头检查规则集中可用。 |
| $H | 邮件中心 (m4 技术)。 |
| $(hdr长度) | 头值的长度,存储在 $(currHeader)中。 |
| $(hdr_name) | 已针对其调用当前头检查规则集的头字段的名称。 |
| $i | 队列标识。 |
| $(if_addr) | 传入连接接口的 IP 地址 (除非它位于回送网络中)。 |
| ${if_addr_out} | 出局连接的接口的 IP 地址 (除非它在回送网络中)。 IPv6 地址在地址前使用 IPv6: 进行标记。 |
| ${if_family} | 入局连接的接口的 IP 系列 (除非它在回送网络中)。 |
| ${if_family_out} | 出局连接的接口的 IP 系列 (除非它在回送网络中)。 |
| $(if_name) | 传入的连接接口的名称。 |
| ${if_name_out} | 外发连接的接口的名称。 |
| $j= | 官方规范名称。 |
| $k | UUCP 节点名 (V8.1 及更高版本)。 |
| ${load_avg} | 当前负载平均值。 |
| ${msg_id} | Message-Id: header 的值。 |
| ${msg_size} | 在收集消息之前, SIZE= 参数的值,即通常是消息的大小 (在 ESMTP 对话中) ,然后是由 发送邮件 命令计算的消息大小。 |
| ${nbadrcpts} | 单条消息的错误收件人数。 |
| ${nrcpts} | 单个消息的已验证收件人的数量。 注: 由于在调用 check_rcpt 后会进行收件人验证,因此此规则集中的值比预期值少 1。
|
| ${time} | 时间 (3) 函数的输出,即自 0 小时 0 分 0 秒 0 1970 年 1 月 1 日全球 0 时间 (0) 以来经过的秒数。 |
| ${tls_version} | 用于连接的 TLS/SSL 版本,例如, TLSv1, SSLv3和 SSLv2; ,在使用 STARTTLS 之后定义。 |
| ${total_rate} | 在Connection-RateWindowSize 指定的时间间隔内传入连接的总数。 |
| ${verify} | 仅在使用 (或尝试) STARTTLS 之后定义的对所提供证书的验证结果。 可能的值为:
|
| 宏 | 定义 |
|---|---|
| $l | 已过时。 使用UnixFromLine选项。 |
| $L | 本地用户中继设备 (m4 技术)。 |
| $m | DNS 域名 (V8.1 及更高版本)。 |
| 百万美元 | 我们伪装成 (m4 技巧) 的人。 |
| $(邮件地址) | 为 SMTP 邮件 命令提供的地址的已解析三元组的地址部分。 |
| $(邮件主机) | 为 SMTP 邮件 命令提供的地址的已解析三元组中的主机。 |
| $(邮件发送器) | SMTP 邮件 命令的给定地址的已解析三元组中的邮件程序。 |
| $n | 错误消息发送方。 |
| $(ntries) | 传递尝试的次数。 |
| $o | 已过时。 请改为使用 OperatorChars 选项。 |
| $opMode | 启动操作方式 (V8.7 及更高版本)。 |
| $p | 发送邮件 进程标识。 |
| $q- | 发送方地址的缺省格式。 |
| $(队列时间间隔) | -q 标志中定义的队列运行时间间隔。 |
| $r | 使用的协议。 |
| $R | 未限定名称的中继设备 (m4 技术)。 |
| $(rcpt_addr) | 为 SMTP RCPT 命令提供的地址的已解析三元组的地址部分。 |
| $(rcpt_host) | 为 SMTP RCPT 命令提供的地址的已解析三元组中的主机。 |
| $(rcpt_mailer) | SMTP RCPT 命令的给定地址的已解析三元组中的邮件程序。 |
| 发送方的主机名。 | |
| $S | 智能主机 (m4 技术)。 |
| $(服务器地址) | 这是当前外发 SMTP 连接的服务器的地址。 |
| $(服务器名称) | 这是当前外发 SMTP 连接的服务器的名称。 |
| $t | 当前时间 (以秒计)。 |
| $u | 收件人的用户名称。 |
| 美元 | 要覆盖 $k 的 UUCP 名称。 |
| $v | 发送邮件 程序的版本。 |
| $v | UUCP 中继设备 (对于类 $= V) (m4 技术)。 |
| $w | 此主机的短名称。 |
| $W | UUCP 中继设备 (对于类 $= W) (m4 技术)。 |
| $x | 发送方的完整名称。 |
| 10 美元 | UUCP 中继设备 (对于类 $= X) (m4 技术)。 |
| $y | 这是收件人的主目录。 |
| $Z | 这是控制 TTY 的名称。 |
| $Y | 未分类主机的 UUCP 中继设备。 |
| $Z | 收件人的主目录。 |
| $Z | 此 m4 配置的版本 (m4 技术)。 |
有三种可以使用的日期类型。 $a 和 $b 宏采用 RFC 822 格式; $a 是从消息的 "Date:" 行中抽取的时间 (如果有的话) , $b 是当前日期和时间 (用于邮戳)。 如果在入局消息中找不到 "Date:" 行,那么 $a 也会设置为当前时间。 宏等价于 UNIX (ctime) 格式的 $b 宏。 $t 宏是当前时间 (以秒为单位)。
宏 $w, $j和 百万美元 设置为该主机的标识。 如果可能的话, Sendmail 会尝试查找主机的标准名称; 它通过调用 gethostname (2) 以获取当前主机名,然后将该主机名传递 3 gethostbyname (3) ,该主机名应该返回该主机名的规范版本。 假定此操作成功,那么会将 $j 设置为标准名称,并将 百万美元 设置为名称的域部分 (第一个点之后的所有内容)。 如果您具有级别 5 或更高的配置文件,那么 $w 宏将设置为第一个单词 (第一个点之前的所有内容); 否则,它将设置为与 $j相同的值。 如果规范不成功,那么配置文件将 $j 设置为标准域名是必需的。
$f 宏是最初确定的发件人 ID; 向特定主机发送邮件时, $g 宏将设置为发件人的地址 (相对于收件人)。 例如,如果用户发送至以下对象:king@castle.com从机器vangogh.painter.com,那么 $f 宏将vincent并且 $g 宏将vincent@vangogh.painter.com.
$x 宏将设置为发送方的全名。 这可以通过几种方式来确定。 它可以作为标志传递到 发送邮件。 它可以在 NAME 环境变量中定义。 第三个选项是标题中的 "Full-Name:" 行 (如果存在) 的值,第四个选项是 "From:" 行的注释字段。 如果所有这些都失败,并且消息是在本地生成的,那么将在 /etc/passwd 文件中查找全名。
发送时,会将 $h, $u和 $z 宏设置为收件人的主机,用户和主目录 (如果是本地的)。 前两个规则分别从重写规则的 $@ 和 $: 部分进行设置。
$p 和 $t 宏用于创建唯一的字符串 (例如,用于 "message-Id:" 字段)。 $i 宏设置为此主机上的队列标识; 如果放入时间戳记行中,那么它可能对跟踪消息很有用。 $v 宏设置为 发送邮件的版本号; 这通常放置在时间戳记中,并已被证明对调试很有用。
$c 字段设置为 "中继段计数" ,即,已处理此消息的次数。 这可以通过命令行上的 -h 标志或通过对消息中的时间戳记进行计数来确定。
$r 和 字段设置为用来与 发送邮件 和发送主机名进行通信的协议。 可以使用-p命令行标志一并设置,也可以使用-M或-oM标志分别设置。
$_ 设置为经过验证的发送方主机名。 如果发送方正在运行符合 RFC 1413 的 IDENT 服务器,并且接收方已开启 IDENT 协议,那么它将包含该主机上的用户名。
$(客户机名称), $(client_addr)和 $(客户机端口) 宏设置为正在将 发送邮件 作为服务器调用的连接主机的名称,地址和端口号。 这些规则集可以在 check_ * 规则集中使用 (使用 $& 延迟评估表单)。
更改 "域名宏"
DDname1.name2.name3.name4可以通过 主机名 命令来自动设置此宏。 发送邮件 命令读取已使用 主机名 命令设置的内容,并使用它来初始化主机和域的宏和类。 仅当您希望 发送邮件 主机名和域名与 主机名 命令设置的主机名和域名不同时,才需要更改配置文件宏。
要更改域名宏,请执行以下操作:
- 输入以下命令:
vi /etc/mail/sendmail.cf - 查找以以下项开头的行:DD.
- 替换以下内容DD使用您的域名。 例如,如果您的域名是newyork.abc.com,请输入:
DDnewyork.abc.com - 保存文件并退出编辑器。
更改主机名宏
主机名宏 多指定您在生成的所有消息的返回地址中使用的主机系统的名称。 主机名宏的格式是 Dw ,后跟此机器的主机名,例如:
Dwhostname
缺省情况下, 发送邮件 命令会读取已使用 主机名 命令设置的内容,并使用该命令来初始化主机和域名宏及类。 仅当您希望 发送邮件 命令主机和域名与 主机名 命令设置的名称不同时,才应更改配置文件宏。
要更改主机名宏:
- 输入以下命令:
vi /etc/mail/sendmail.cf - 查找以以下项开头的行:Dw.
- 替换以下内容Dw使用您的主机名。 例如,如果主机名为brown,请输入:
Dwbrown - 保存文件并退出编辑器。注: 如果定义了 多 宏,那么还必须定义 CW (主机名) 类。
修改 sendmail.cf 文件和 submit.cf 文件
cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.working
cp /etc/mail/submit.cf /etc/mail/submit.cf.working如果您进行的更改导致邮件系统无法正常工作,那么可以返回到使用 /etc/mail/sendmail.cf 文件或您知道工作的 /etc/mail/submit.cf 文件的副本。
您可以使用收藏的文本编辑器来修改安全文件。 但是,某些编辑器将制表符存储为它们所表示的空格数,而不是制表符本身。 如果将跳进字符定义为规则集中的字段分隔符,那么这可能会导致意外结果。 请使用 vi 编辑器来避免此问题,或者使用 J 选项更改字段分隔符。 (为了便于参考,本讨论假设您使用 vi 编辑器来修改配置文件。)
在更改 /etc/mail/sendmail.cf 文件或 /etc/mail/submit.cf 文件中的任何信息后,必须指示守护程序重新读取该文件。 请参阅 使 sendmail 守护程序 Reeread 成为配置信息 一节以了解这些指示信息。
使 sendmail 守护程序 Reeread 成为配置信息
在您对配置文件进行更改后,指示守护程序重新读取该文件。 如果已使用 斯塔茨 RC 命令启动 发送邮件 命令,请输入以下命令:
refresh -s sendmail
kill -1 `cat /etc/mail/sendmail.pid`这两个命令都导致守护程序重新读取 /etc/mail/sendmail.cf 文件, /etc/mail/submit.cf 文件, /etc/mail/aliases 文件和 /etc/sendmail.nl 文件。
别名数据库
name: name1, name2, ...linda@cloud.ai.acme.org: linda@CS.达到预期效果。 可以通过以空格或制表符开始任何连续行来继续使用别名。 空白行和以井号 (#) 开头的行是注释。
第二个表单由新的数据库管理器 (NDBM) 或 Berkeley 数据库库处理。 此格式位于文件 /etc/mail/aliases.db (如果使用 NEWDB) 或 /etc/mail/aliases.dir 和 /etc/mail/aliases.pag (如果使用 NDBM) 中。 这是 发送邮件 用于解析别名的实际表单。 此技术用于改进性能。
AliasFile=switch:aliasesnis ) 将用作别名开关中 "files" 条目的文件名。 例如,如果配置文件包含以下内容:AliasFile=/etc/mail/aliasesaliases nis files nis那么将首先在 NIS 数据库中搜索别名,然后在 /etc/mail/aliases中搜索别名。
重建别名数据库
newaliases/usr/sbin/sendmail -bi如果在配置中指定了 RebuildAliases 选项,那么 sendmail 将在别名数据库过期时自动重建别名数据库 (如果可能)。 在具有大的别名文件的负载很重的机器上自动重建会很危险。 如果重建数据库所需的时间可能超过重建超时(选项AliasWait,通常为 5 分钟),就有可能出现多个进程同时启动重建进程的情况。
如果您指定了多个别名数据库,那么 -比 标志将重建所有数据库类型。 例如, II 了解它可以重建 NDBM 数据库,但不能重建 NIS 数据库。
别名数据库的潜在问题
别名数据库可能发生一些问题。 它们都是 发送邮件 进程在仅部分构建 DBM 版本时访问 DBM 版本的结果。 这可能在两种情况下发生: 一个进程访问数据库,而另一个进程正在重建该数据库,或者重建数据库的进程在完成重建之前 (由于被终止或系统崩溃) 终止。
Sendmail 有三种方法来尝试缓解这些问题。 首先,它在重建数据库时忽略中断; 这避免了有人中止进程而离开部分重建的数据库的问题。 其次,它会在重建期间锁定数据库源文件,但这可能无法通过 NFS 工作,或者如果该文件不可写。 第三,在重建结束时,它会添加以下表单的别名:
@: @
(通常是不合法的)。 在 发送邮件 访问数据库之前,它会检查以确保此条目存在。
列出所有者
如果发送到特定地址 X时发生错误,那么 发送邮件 将查找格式为 所有者-x 的别名以接收错误。 对于列表的提交者无法控制列表本身的维护的邮件列表而言,这通常很有用。 在此情况下,列表维护人员将是该列表的所有者。 例如:
unix-wizards: linda@paintbox, wnj@monet, nosuchuser,
sam@matisse
owner-unix-wizards: unix-wizards-request
unix-wizards-request: linda@paintbox
会导致linda@paintbox以获取某人由于包含以下内容而发送至 Unix 向导时将发生的错误:nosuchuser名单上的人
列表所有者还会导致修改包络发送方地址。 如果所有者别名的内容指向单个用户,那么将使用这些内容。 否则,将使用该别名本身的名称。 出于这个原因,并且为了符合因特网约定, "owner-" 地址通常指向 "-request" 地址; 这会导致消息与典型的因特网约定 (使用 "list-request" 作为返回地址) 一起出去。
每个用户转发 (.forward Files)
作为别名数据库的替代方法,用户可以在其主目录中放置名为 ". forward" 的文件。 如果此文件存在, 发送邮件 会将该用户的邮件重定向到 .forward 文件中列出的地址列表。 例如,如果用户 "kenly" 的主目录具有包含以下内容的 .forward 文件:
kenly@ernie
joel@renoir
那么到达 "kenly" 的任何邮件都将重定向到指定的帐户。
配置文件定义了要检查的文件名序列。 缺省情况下,这是用户的 .forward 文件,但可以使用 ForwardPath (J) 选项定义为更通用。 如果更改此选项,那么必须将更改通知您的用户群。
IDENT 协议支持
UCB 发送邮件 支持 RFC 1413 中定义的 IDENT 协议。 虽然这增强了电子邮件消息作者的识别,对原始系统执行 "回调" 以将特定 TCP 连接的所有者包括在审计跟踪中,但它在任何意义上都不是完美的; 一个确定的伪程序都很容易违反 IDENT 协议的安全性。
从 RFC 1413 中摘录了以下描述:
6 6. 安全考虑
此协议返回的信息最多与提供该协议的主机或运行该主机的组织一样值得信赖。 例如,开放式实验室中的 PC 很少有任何控制来阻止用户使用此协议来返回用户想要的任何标识。 同样,如果主机已被泄露,那么返回的信息可能完全错误且具有误导性。
标识协议并非旨在作为授权或访问控制协议使用。 充其量,它提供了一些与 TCP 连接相关的附加审计信息。 最糟糕的是,它可能提供误导,不正确或恶意不正确的信息。
强烈建议不要将此协议返回的信息用于审计以外的其他目的。 具体而言,使用 "标识协议" 信息来作出访问控制决策,作为主要方法 (即,不进行其他检查) 或作为其他方法的辅助方法,可能会导致正常主机安全性的减弱。
标识服务器可能显示有关通常可能被视为专用的用户,实体,对象或进程的信息。 标识服务器提供的服务是一些电话公司提供的 CallerID 服务的粗略模拟,适用于 CallerID 服务的许多相同的隐私注意事项和参数适用于标识。 如果出于隐私考虑而不运行 "finger" 服务器,那么您可能不希望运行此协议。
调整
根据您站点的需求,您可能想要更改一些配置参数。 其中大部分是使用 sendmail.cf 文件或 submit.cf 文件中的选项设置的。 例如,行 "O Time-out.queuereturn=5d" 将选项 "Timeout.queuereturn" 设置为值 "5d" (5 天)。
对于大多数站点,这些选项都具有适当的缺省值。 但是,具有很高邮件负载的站点可能发现需要根据其邮件负载对其进行适当调整。 尤其是,迂到大量小型消息 (其中许多消息传递给许多收件人) 的站点可能会发现,它们需要调整处理队列优先级的参数。
所有先前版本的 发送邮件 都具有单字符选项名称。 虽然旧的短名称仍被接受,但大多数新选项都没有短等效项。
超时
所有时间间隔都使用缩放语法进行设置。 例如, "10m" 表示 10 分钟,而 "2h30m" 表示 2 个半小时。 整套比例尺是:
- s
- 秒
- m
- 分钟
- h
- 小时
- d
- 天数
- w
- 星期数
读超时
所有超时都具有选项名称 "Time-out.suboption"。 可识别的子选项,其缺省值以及 RFC 1123 部分 5.3.2 所允许的最小值为:
| 子选项 | 描述 |
|---|---|
| 阿孔内克特 | 等待单个传递尝试成功 [0 , unspecified] 0 所有连接的总体超时。 如果 0 0 ,那么不会应用总体限制。 这可用于限制尝试连接到可能接受收件人的电子邮件的主机长列表的总时间量。 该超时不适用于FallbackMXhost,也就是说,如果时间已用完,下一步将尝试使用FallbackMXhost。 |
| auth | SMTP AUTH 对话框中的回复超时 [10m,未指定]。 |
| 命令- | 在服务器 SMTP 中,等待另一个命令的时间。 [1h, 5m]。 |
| connect | 等待 SMTP 连接打开的时间 2 连接 (2) 系统调用) [0 ,未指明]。 如果为零,那么使用内核缺省值。 在任何情况下,此选项都不能延长内核提供的超时时间,但它可以缩短此时间。 这是为了绕过提供极长的连接超时 (在一种情况下为 90 分钟) 的内核。 |
| control | 完成完整控制套接字事务的超时值为 [2m, none]。 |
| 数据块- | 等待读取数据块 (即,消息的主体)。 [1h, 3m]。 这应该是很长的,因为它也适用于输入到 发送邮件 的程序管道传送,这些程序不保证迅速。 |
| 数据最终- | 等待来自终止消息的点的应答。 [1h,10m]。 如果此时间比接收方传递消息实际需要的时间短,那么将生成重复项。 这在 RFC1047中进行了讨论。 |
| 达泰妮特 | 等待来自 DATA 命令 [5m, 2m] 的回复。 |
| 文件打开 | 打开 .forward 和 :include:文件 [60s,无] 时发生超时。 |
| 图标 | 与 connect相同,但它仅适用于针对给定消息 [0, unspecified] 连接到主机的初始尝试。 这段时间应该很短 (几秒)。 将立即为连接良好且响应迅速的主机提供服务。 在初始交付尝试中,运行缓慢的主机不会阻止其他交付。 |
| 伊代特- | 等待对 IDENT 查询 [30s11,未指定] 的应答时发生超时。 |
| initial | 等待初始 220 问候语消息 [5m, 5m]。 |
| 海洛 | 等待来自 HELO 或 EHLO 命令 [5m, unspecified] 的应答。 这可能需要主机名查找,因此 5 分钟可能是合理的最小值。 |
| 主机状态 | 在将主机 (例如,主机关闭) 的长状态信息视为旧文件 [30m,未指定] 之前对其进行高速缓存的时间。 |
| 邮件- | 正在等待来自 MAIL 命令 [10m, 5m] 的应答。 |
| 其他 | 等待来自其他 (但简短) 命令 (例如 NOOP (不操作) 和 VERB (进入详细方式)) 的应答。 [2m,未指定]。 |
| 退出 | 正在等待来自 QUIT 命令 [2m,未指定] 的应答。 |
| 接收- | 正在等待来自 RCPT 命令 [1h, 5m] 的应答。 这应该很长时间,因为它可能指向一个需要很长时间才能展开的列表 (请参阅下面)。 |
| rset | 正在等待来自 RSET 命令 [5m,未指定] 的应答。 |
| resolver.retrans | 设置解析器重新传输时间间隔 (以秒为单位)。 设置 Timeout.resolver.retrans.first 和 Timeout.resolver.retrans.normal。 |
| resolver.retrans.first | 为首次尝试传递消息设置解析器重新传输时间间隔 (以秒为单位)。 |
| resolver.retrans.normal | 设置所有解析器查找的重新传输时间间隔 (以秒为单位) ,但第一次尝试传递时除外。 |
| resolver.retry | 设置重新发送解析器查询的尝试次数。 设置 Timeout.resolver.retry.first 和 Timeout.resolver.retry.normal。 |
| resolver.retry.first | 设置为第一次传递尝试重新发送解析器查询的尝试次数。 |
| resolver.retry.normal | 设置尝试重新传输解析器查询以进行除第一次传递尝试之外的所有解析器查询的次数。 |
| 斯塔特尔斯 | 对 SMTP STARTTLS 命令的应答以及 TLS 握手 [1h,未指定] 的超时。 |
为了与旧配置文件兼容,如果未指定子选项,那么所有以 - 标记的超时都将设置为指示的值。
消息超时
在队列中坐了几天后,一条消息就会超时。 这是为了确保至少发送方意识到不能发送消息。 通常会将超时设置为 5 天。 有时,如果消息在队列中的时间超过几个小时 (假定您通常具有良好的连接; 如果您的消息通常需要几个小时才能发送,那么您不希望执行此操作,因为这不会是异常事件) ,那么也会认为发送警告消息很方便。 这些超时是使用配置文件中的 Timeout.queuereturn 和 Timeout.queuewarn 选项设置的 (先前两者都是使用 T 选项设置的)。
由于这些选项是全局选项,并且您不知道域外的另一个主机将关闭多长时间,因此建议使用 5 天超时。 这允许收件人修正问题,即使该问题发生在长周末开始时也是如此。 RFC 1123 部分 5.3.1.1 指出此参数应该为 "至少 4-5 天"。
可以在 T 选项上显示 Timeout.queuewarn 值,方法是指示应该发送警告消息的时间; 这两个超时之间用斜杠分隔。 例如,以下行:
OT5d/4h
导致电子邮件在 5 天后失败,但在 4 个小时后将发送警告消息。 这应该足够大,以至于该消息将被尝试多次。
队列时间间隔
-q 标志的参数指定子守护程序将以多长时间运行队列。 这通常设置为 15 分钟到 1 小时之间。 RFC 1123 的 5.3.1.1 部分建议至少 30 分钟。
在队列运行期间派生
通过设置ForkEachJob(Y) 选项,sendmail将在队列运行时,在每封邮件之前分叉。 这将防止 发送邮件 消耗大量内存,因此它可能在内存不足的环境中很有用。 不过,如果不设置ForkEachJob选项,sendmail就会跟踪在队列运行期间停机的主机,这可以大大提高性能。
如果设置了ForkEachJob选项,sendmail就不能使用连接缓存。
队列优先级
每个消息在第一次实例化时都分配有一个优先级,由消息类 (根据 "优先顺序: 标题" 确定) 乘以 "工作类因子" 的消息大小 (以字节为单位) 和 "工作接收方因子" 的接收方数所组成。 优先级用来对队列排序。 更高优先级的数字意味着稍后运行队列时将处理该消息。
包含消息大小,以便与小消息相比,大消息受到惩罚。 消息类允许用户通过在其消息中包含 "Precedence:" 字段来发送 "高优先级" 消息; 此字段的值将在配置文件的 P 行中进行查找。 由于收件人数量会影响消息向系统提供的负载量,因此也会将此内容包括在优先级中。
可以分别使用 RecipientFactor (y) 和 ClassFactor (z) 选项在配置文件中设置接收方因子和类因子。 它们缺省值为 30000 (对于接收方因子) 和 1800 (对于类因子)。 初始优先级为:
pri = msgsize - (class times bold ClassFactor) + (nrcpt times bold
RecipientFactor)
(请记住,此参数的较高值实际上意味着将以较低的优先级处理该作业。)
每次处理作业(即每次尝试交付作业)时,也可以使用 RetryFactor(Z) 选项设置的 "工作时间系数 "来调整作业的优先级。 这将添加到优先级,因此它通常会降低作业的优先顺序,因为多次失败的作业在将来会趋向于再次失败。 RetryFactor选项的默认值为 90000。
负载限制
如果使用 QueueLA (x) 选项的系统负载平均值过高,那么可以要求 Sendmail 对邮件进行排队 (但不交付)。 当负载平均值超过 QueueLA 选项的值时,如果 QueueFactor (q) 选项除以当前负载平均值与 QueueLA 选项之差加上 1 超出消息优先级,那么传递方式将设置为 q (仅限队列); 即,如果:
pri > { bold QueueFactor } over { LA - { bold QueueLA } + 1 }
QueueFactor 选项缺省为 600000 ,因此每个负载平均点都值为 600000 个优先级点 (如上所述)。
对于极端情况, RefuseLA (X) 选项定义 sendmail 将拒绝接受网络连接的负载平均值。 本地生成的邮件 (包括待收 UUCP 邮件) 仍被接受。
传递方式
通过 DeliveryMode (d) 配置选项设置了许多 sendmail 可操作的传递方式。 这些方式指定以多快的速度传递邮件。 法律模式如下:
| 传递方式 | 定义 |
|---|---|
| i | 以交互方式 (同步) 交付 |
| 博 | 后台交付 (异步) |
| q | 仅限队列 (不交付) |
| 天 | 延迟交付尝试 (不交付)。 |
有一些权衡。 方式 一 为发件人提供最快速的反馈,但可能会降低某些邮件程序的速度,并且几乎是必需的。 B 方式会迅速传递消息,但如果您具有需要很长时间来传递消息的邮件程序,那么可能会导致大量进程。 方式 Q 将最大限度减少机器上的负载,但意味着交付可能延迟到队列时间间隔。 方式 D 与方式 Q 相同,但它也会阻止所有早期映射查找工作; 它旨在用于 "按需拨号" 站点,在这些站点中 DNS 查找可能非常昂贵。 一些简单错误消息 (例如,host unknown during the SMTP protocol) 将延迟使用此方式。 方式 B 是缺省值。
如果在方式 Q (仅限队列) , D (延迟) 或 B (在后台传递) 下运行,那么 发送邮件 在初始收到邮件时将不会展开别名并关注 .forward 文件。 这会加速对 RCPT 命令的响应。 方式 一 无法由 SMTP 服务器使用。
日志级别
可以针对 发送邮件设置日志记录级别。 使用标准配置表的缺省值为级别 9。 级别如下所示:
| 日志级别 | 定义 |
|---|---|
| 重大安全事件数量 | 最小日志记录数。 |
| 第 1 年 | 严重系统故障和潜在安全问题。 |
| 2 | 通信丢失 (网络问题) 和协议故障。 |
| 3 | 其他严重故障。 |
| 4 | 轻微故障。 |
| 5 代 | 消息收集统计信息。 |
| 6 | 创建错误消息, VRFY 和 EXPN 命令。 |
| 7 | 传递失败 (例如,主机或用户未知)。 |
| 8 周 | 成功的交付和别名数据库重建。 |
| 9 | 延迟的消息 (例如,由于主机已关闭)。 |
| 10 | 数据库扩展 (别名,转发和 userdb 查询)。 |
| 11 | NIS 错误与作业结束处理。 |
| 12 | 记录所有 SMTP 连接。 |
| 13 | 记录错误的用户 shell ,具有不正确许可权的文件以及其他可疑情况。 |
| 14 | 记录拒绝的连接。 |
| 15 | 记录所有入局和出局 SMTP 命令。 |
| 20 | 日志尝试运行锁定的队列文件。 这些不是错误,但如果您的队列似乎已阻塞,请注意这些错误可能很有用。 |
| 30 | 丢失锁定 (仅当使用 洛克夫 而不是 群时)。 |
文件方式
用于文件的方式取决于您想要的功能以及需要的安全级别。
发送邮件 实际使用的数据库是由以下文件表示的:
- /etc/mail/aliases.db
- Berkeley 数据库
这些文件上的方式应该与 /etc/mail/aliases的方式匹配。 如果 别名 可写且文件不可写,那么用户将无法将其期望的更改反映到实际数据库中。 但是,如果 别名 为只读并且 DBM 文件可写,那么稍微复杂的用户仍可以安排窃取邮件。
如果 DBM 文件不可写,或者没有启用自动重建功能(使用AutoRebuildAliases选项),那么每次更改文本版本时都必须小心重建别名数据库:
newaliases
如果忽略或忘记此步骤,那么任何预期更改都将丢失。
连接高速缓存
处理队列时, 发送邮件 将尝试保持最后几个打开的连接处于打开状态,以避免启动和关闭成本。 这仅适用于 IPC 连接。
当尝试打开连接时,首先会搜索高速缓存。 如果找到已打开的连接,那么将通过发送 RSET 命令来探测该连接是否仍处于活动状态。 如果此操作失败,那么不会发生错误; 相反,连接将关闭并重新打开。
两个参数控制连接高速缓存。 ConnectionCacheSize(k) 选项定义了允许同时打开的连接数。 如果设置为零,那么连接将尽可能快地关闭。 缺省值为一个。 这应该根据您的系统大小来设置; 它将限制 发送邮件 在队列运行期间将使用的系统资源量。 永远不要将此值设置为高于 4。
ConnectionCacheTimeout(K) 选项指定允许任何缓存连接闲置的最长时间。 当空闲时间超过此值时,连接将关闭。 此数字应该很小 (不足 10 分钟) ,以防止您从其他主机获取过多资源。 缺省值为 5 分钟。
名称服务器访问权
如果您需要机器交换 (MX) 支持,那么必须使用域名服务 (DNS)。
ResolverOptions(I) 选项允许你调整名称服务器选项。 命令行将一系列标志作为已记录的解 3 器 (3) (删除了前导 " RES_")。 每个属性前面都可以有一个可选的 "+" 或 "-"。 例如,以下行:
O ResolverOptions=+AAONLY -DNSRCH
打开 AAONLY (仅限于接受权威答案) 并关闭 DNSRCH (搜索域路径) 选项。 大多数解析器库都是缺省 DNSRCH , DEFNAMES 和 RECURSE 标志开启和所有其他标志关闭。 您还可以加入"HasWildcardMX",指定有一个通配符 MX 记录与您的域名匹配;这将在对名称进行规范化时关闭 MX 匹配,从而导致不恰当的规范化。
移动每个用户的转发文件
某些站点从其工作站上的本地磁盘安装每个用户的主目录,以便快速进行本地访问。 但是,结果是 .forward 个文件查询速度缓慢。 在某些情况下,由于文件服务器宕机,邮件甚至可能不适当地在机器上传递。 如果您运行自动安装程序,那么性能可能特别差。
ForwardPath (J) 选项允许您设置转发文件的路径。 例如, config 文件行:
O ForwardPath=/var/forward/$u:$z/.forward.$w
将首先查找与用户登录 /var/forward时同名的文件。 如果找不到该文件 (或者该文件不可访问) ,那么将搜索用户主目录中的文件 ".forward.machinename"。
如果创建 /var/forward之类的目录,那么它应该是方式 1777 (即,应该设置粘性位)。 用户应创建文件方式 644。
可用空间
在有 statfs(2) 系列系统调用(包括statvfs和ustat)的系统上,可以使用MinFreeBlocks(b) 选项指定队列文件系统上可用块的最小数量。 如果在安装队列的文件系统上的可用块数少于指定的块数,那么 SMTP 服务器将拒绝具有 452 错误代码的邮件。 这将邀请 SMTP 客户机稍后再次尝试。
最大消息大小
为避免大容量邮件溢出系统,MaxMessageSize邮件容量)选项可对任何一条邮件的容量设置绝对限制。 这将在 ESMTP 对话中公布,并在消息收集期间进行检查。
隐私标志
PrivacyOptions (p) 选项允许您设置某些 "隐私" 标志。 实际上,其中许多命令不会给您任何额外的隐私,而只是坚持客户机 SMTP 服务器在使用某些命令之前使用 HELO 命令,或者添加额外的头以指示可能发生的安全违例。
该选项采用一系列标志名称; 最终隐私是包含这些标志或这些标志的隐私。 例如:
O PrivacyOptions=needmailhelo, noexpn
在接受 MAIL 命令之前,坚持使用 HELO 或 EHLO 命令,并禁用 EXPN 命令。
RFC 1123 S 5.1.6中详细描述了这些标志。
也发送给我
通常, 发送邮件 会从任何列表扩展中删除 (包络) 发送方。 例如,如果 "linda" 发送到包含 "linda" 作为其中一个成员的列表,那么她将不会获取该消息的副本。 如果 -m (me too) 命令行标志,或者如果配置文件中设置了 MeToo (m) 选项,那么将禁止此行为。
C 和 F-定义类
Ccphrase1 phrase2...
FcfileCHmonet ucbmonetCHmonet
CHucbmonet是等效的。 "F" 表单从指定的文件中读取类 c 的元素。
可以使用 $= 或 $~ 在规则中访问类的元素。 $~ (非类中的匹配条目) 仅与单个单词匹配; 在此上下文中,将忽略该类中的多单词条目。
将类 $=w 设置为此主机已知的所有名称的集合。 这可用来与本地主机名匹配。
类 $=k 被设置为与 $k 相同,即, UUCP 节点名。
类 $=m 设置为用于识别此主机的域的集合,最初仅为 $m。
通过 T 配置行将类 $=t 设置为可信用户的集合。 如果要从文件中读取可信用户,请使用 英尺/文件/名称。
可以将类 $=n 设置为从不进行 8 到 7 位编码的 MIME 主体类型的集合。 缺省值为 "multipart/signed"。 从不直接对消息类型 "message/ *" 和 "multipart/*" 进行编码。 总是以递归方式处理多重部件消息。 消息/* 消息的处理是由类 $= s 控制的。 类 $=e 包含可以进行 8 位-> 7 位编码的 Content-Transfer-Encodings。 它预定义为包含 "7bit" , "8bit" 和 "binary"。 类 $=s 包含可以递归处理的消息的子类型集合。 缺省情况下,它仅包含 "rfc822"。 其他 "message/ *" 类型不能为 8-> 7 位编码。 如果包含 8 位数据的消息发送到 7 位主机,并且无法将该消息编码为 7 位,那么会将其剥离为 7 位。
三个类 "$= U" , "$= Y" 和 "$=Z" 定义为描述需要使用 uucp 邮件程序的主机。 具体而言, $=U 应该包含需要 uucp-old 邮件程序的所有主机。 $=Y 应该包含需要 uucp-new 邮件程序的所有主机。 最后, $=Z 应该包含需要 uucp-uudom 邮件程序的所有主机。 每个 uucp 主机都应该属于其中一个类。
FL/etc/passwd %[^:]它读取第一个冒号的每一行。
更改主机名
CwCw alias aliasn... 缺省情况下, 发送邮件 命令会读取已使用 主机名 命令设置的内容,并使用该命令来初始化主机和域名宏及类。 仅当您希望 发送邮件 主机名和域名与 主机名 命令设置的名称不同时,才应更改配置文件宏。
要更改主机名:
- 输入以下命令:
vi /etc/mail/sendmail.cf
或
vi /etc/mail/submit.cf
- 查找以以下开头的行:Dj and Dw.Dj and Dw覆盖使用 "hostname" 设置的主机名和域名。
- 替换Dj and Dw新主机名信息。 例如,如果主机名为brown.newyork.abc.com你也有一个别名brown2,请输入:
- 保存文件并退出编辑器。
创建使用文件的类
FClass FileName [Format]Class是与列示的任何单词匹配的类的名称FileName.Filename是文件的完整路径名 (为了方便起见,您可能希望将该文件放在 /etc/mail 目录中)。Format是可选的 scanf 子例程格式说明符,用于指示 FileName中类的元素的格式。 该Format说明符只能包含一个转换规范。
M-定义邮件程序
在此行中定义了邮件程序的程序和接口。 格式是:
Mname, {field=value}*
其中 name 是邮件程序的名称 (仅在内部使用) ,而 "field = name" 对定义邮件程序的属性。 字段为:
| 字段 | 描述 |
|---|---|
| 路径 | 邮件程序的路径名。 |
| 标志 | 此邮件程序的特殊标志 |
| 发件人 | 重写发送方地址的集 |
| 收款人 | 重写收件人地址的集 |
| 阿尔格夫 | 要传递给此邮件程序的参数向量 |
| eol | 此邮件的行结束符字符串 |
| 最大大小 | 此邮件程序的最大消息长度 |
| 最大消息数 | 每个连接传递的最大消息数 |
| 行限制 | 消息体中的最大行长度 |
| 目录 | 用于邮件程序的工作目录 |
| 用户标识 | 要运行的缺省用户和组标识 |
| 很好。 | 邮件程序的 nice (2) 增量 |
| 字符集 | 用于 8 位字符的缺省字符集 |
| TYPE | MTS 类型的信息 (用于错误消息) |
| WAIT | 等待邮件程序的最大时间长度 |
| / | 用于邮件程序的根目录 |
| 队列组 | 这是邮件程序的缺省队列组。 |
仅选中字段名称的第一个字符。
以下列表中的标志可以在邮件程序描述中进行设置。 任何其他标志都可以自由使用,以有条件地将头分配给以特定邮件程序为目标的消息。 使用 - 标记的标志不是由 发送邮件 二进制解释的; 这些标志通常用于与 H 行的标志部分相关。 标记为 = 的标志将应用于发件人地址的邮件程序,而不是应用于普通收件人邮件程序。
| 标志 | 描述 |
|---|---|
| a | 运行扩展 SMTP (ESMTP) 协议 (在 RFC 1651 , 1652 和 1653 中定义)。 如果 SMTP 问候语消息包含单词 "ESMTP" ,那么此标志缺省值为 on。 |
| a | 在别名数据库中查找该地址的用户部分。 通常,这仅针对本地邮件程序设置。 |
| 博 | 在消息结束时强制使用空白行。 这旨在处理某些需要空白行但自己不提供的 /bin/mail 版本。 它通常不会在网络邮件上使用。 |
| c | 请勿在地址中包含注释。 仅当您必须围绕被注释混淆的远程邮件程序进行工作时,才应该使用此选项。 此操作将"短语<地址>"或"地址(注释)"形式的地址简化为仅保留"地址"部分。 |
| C= | 如果从设置了此标志的邮件程序接收到邮件,那么标题中没有 at 符号 ("@") 的任何地址 在被规则集 3 重写后,将在发送方包络地址中加入 "@domain" 子句。 这允许具有以下格式的标题的邮件:
将自动重写为 (尽管 不 可靠):
|
| 天 | 请勿在路由地址语法地址周围包含尖括号。 这对于将要将地址传递到可能将尖括号解释为 I/O 重定向的 shell 的邮件程序很有用。 |
| D- | 此邮件程序需要 "Date:" 标题行。 |
| e | 此邮件程序连接到的成本很高,因此请尽量避免正常连接。 在队列运行期间将发生任何必需的连接。 |
| :NONE. | 在带有 `> ' 符号的消息中以 "From" 开头的转义行。 |
| f | 邮件程序需要来自标志的 - ,但仅当这是网络转发操作时 (即,如果执行用户不具有特殊许可权,那么邮件程序将给出错误)。 |
| F- | 此邮件程序需要 "From:" 头行。 |
| g | 通常, 发送邮件 根据 RFC 1123 的要求使用空返回地址发送内部生成的错误消息。 但是,某些邮件程序不接受空的返回地址。 如果需要,您可以设置 G 标志以阻止 发送邮件 遵守标准; 错误消息将从 MAILER-DAEMON 发送 (实际上,是 $n 宏的值)。 |
| h | 应该在此邮件程序的主机名中保留大写。 |
| i | 对包络发送方地址执行用户数据库重写。 |
| i | 此邮件程序将向其他 森德梅尔 发送 SMTP ,因此它可以使用特殊协议功能。 此选项不是必需的 (即,如果省略此选项,那么传输仍将成功运行,尽管可能没有尽可能高效地运行)。 |
| j | 在收件人和发件人上执行用户数据库重写。 |
| k | 通常,当 发送邮件 通过 SMTP 连接到主机时,它会进行检查,以确保这不会意外地与 发送邮件 配置错误或远程网络接口设置为回送方式时可能发生的主机名相同。 此标志将禁用回送检查。 它只应该在非常特殊的情况下使用。 |
| K | 当前未实施。 保留用于分块。 |
| L | 此邮件程序是本地的 (即,将执行最终交付)。 |
| L | 限制 RFC821中指定的行长度。 此不推荐使用的选项应替换为 L= 邮件声明。 出于历史原因, 我的 标志还设置了 7 个标志。 |
| m | 此邮件程序可以在一个事务中发送给同一主机上的多个用户。 当邮件程序定义的 argv 部分中出现 $u 宏时,该字段将根据需要对所有符合条件的用户进行重复。 |
| M- | 此邮件程序需要 "Message-Id:" 头行。 |
| n | 请勿在消息的前面插入 UNIX样式的 "From" 行。 |
| o | 始终以收件人邮箱的所有者身份运行。 通常, 发送邮件 在传递网络邮件时作为本地生成的邮件的发件人或作为 "守护程序" (实际上是 乌 选项中指定的用户) 运行。 大多数本地邮件程序都需要正常行为,除非邮件程序作为守护程序运行,否则将不允许设置包络发送方地址。 如果设置了 S 标志,那么将忽略此标志。 |
| p | 在 SMTP "MAIL FROM:" 命令中使用 route-addr 样式的反向路径,而不仅仅是返回地址; 尽管在 RFC821 部分 3.1中需要这样做,但许多主机未正确处理反向路径。 RFC 1123 正式建议不要使用反向路径。 |
| P- | 此邮件程序需要 "Return-Path:" 行。 |
| q | 验证解析为该邮件程序的地址 (SMTP VRFY 命令) 时,生成 250 个响应而不是 252 个响应。 这将意味着地址是本地的。 |
| 标志 | 描述 |
|---|---|
| R | 与 F相同,但发送 -r 标志。 |
| R | 从 "安全" 端口打开 SMTP 连接。 除非在 UNIX 机器上,否则安全端口不安全,因此不清楚这是否会添加任何内容。 |
| 请 | 在调用邮件程序之前从地址中除去引号字符 (" 和 \)。 |
| 六 | 在调用邮件程序之前不要重置用户标识。 这将在以 root 用户身份运行 发送邮件 的安全环境中使用。 这可以用来避免伪造的地址。 如果还指定了 U = 字段,那么此标志会使用户标识始终设置为该用户和组 (而不是将其保留为 root 用户)。 |
| u | 应该在此邮件程序的用户名中保留大写。 |
| u | 该邮件发送程序要求采用UUCP风格的"发件人"行,并在末尾添加"来自<主机>"的标识。 |
| w | 用户必须在此机器上具有有效帐户 (getpwnam 必须成功)。 如果没有,邮件将被退回。 这对于获取 ". forward" 功能是必需的。 |
| x- | 此邮件程序需要 "Full-Name:" 头行。 |
| X | 此邮件程序希望使用 RFC821; 中指定的隐藏点算法,基本上,任何以点开头的行都将添加一个额外的点作为前缀 (在另一端将被除去)。 这将确保包含点的消息中的行不会过早终止该消息。 |
| z | 在 发送邮件 与本地邮件程序之间运行本地邮件传输协议 (LMTP)。 这是 RFC 2033 中定义的 SMTP 上的一个变体,专门设计用于传递到本地邮箱。 |
| 重大安全事件数量 | 请不要通过 SMTP 查找主机的 Mx 记录。 |
| 3 | 扩展转换为以下字符的字符列表:=XX转换为Quoted-Printable以包括那些未在 ASCII 和 EBCDIC 之间完全映射的内容。 在站点上具有 IBM® 大型机时很有用。 |
| 5 代 | 如果找不到此地址的别名,请通过 5 集 5 传递该地址以进行可能的备用解析。 此操作旨在将邮件转发到备用传递点。 |
| 6 | 将头删除为 7 位。 |
| 7 | 将所有输出剥离到 7 位。 如果设置了 我的 标志,那么这是缺省值。 请注意,清除此选项不足以获取通过 发送邮件传递的完整 8 位数据。 如果设置了 7 选项,那么这基本上是始终设置的,因为在输入时除去了第八位。 请注意,此选项将仅影响未执行 8-> 7 位 MIME 转换的消息。 |
| 8 周 | 如果已设置,那么可以向此邮件程序发送 8 位数据; 将 8 执行 7 位-> 7 位 MIME 转换的通常尝试。 |
| 9 | 如果 8 ,请执行有限的 7-> 8 位 MIME 转换。 这些转换仅限于文本/纯文本数据。 |
| : | 检查地址以查看它们是否开始 ":include:"。 如果是,请将其转换为 "* include*" 邮件程序。 |
| | | 检查地址以查看它们是否以 "|" 开头。 如果是,请将其转换为 "prog" 邮件程序。 |
| / | 检查地址以查看它们是否以 `/ ' 开头。 如果是,请将其转换为 "* file*" 邮件程序。 |
| @ | 在用户数据库中查找地址。 |
| % | 除非使用-qI/-qR/-qS队列运行修改器之一或 ETRN 请求选择了队列中的报文,否则不要尝试在报文的初始收件人或队列运行中进行投递。 |
具有特殊名称 "error" 的邮件程序可以用来生成用户错误。 (可选) 主机字段是要返回的退出状态,而用户字段是要打印的消息。 退出状态可以是数字或值 USAGE , NOUSER , NOHOST , UNAVAILABLE , SOFTWARE , TEMPFAIL , PROTOCOL 或 CONFIG 之一以返回相应的 EX_ 退出代码。 例如,以下条目:
$#error $@ NOHOST $: Host unknown in this domain
在规则的 RHS 上,如果 LHS 匹配,那么将导致生成指定的错误,并返回 "主机未知" 退出状态。 它始终在 O , S 和 check_ ... 规则集中可用,并且无法使用 M 命令进行定义。
必须在每个配置文件中定义名为 "local" 的邮件程序。 这用于传递本地邮件,并通过几种方式进行特殊处理。 此外,还可以定义名为 "prog" , "* file*" 和 "* include*" 的其他三个邮件程序,以分别调整将消息传递到程序,文件和 :include: 列表。 它们缺省为:
Mprog, P=/bin/sh, F=lsoDq9, T=DNS/RFC822/X-Unix, A=sh -c $u
M*file*, P=[FILE], F=lsDFMPEuq9, T=DNS/RFC822/X-Unix, A=FILE $u
M*include*, P=/dev/null, F=su, A=INCLUDE $u
发送方和接收方重写集可以是简单规则集标识,也可以是两个标识 (以斜杠分隔)。如果是这样,第一个重写集将应用于包络地址,第二个重写集将应用于头。 将任何值设置为零将禁用相应的特定于邮件程序的重写。
该Directory字段是要尝试的目录的路径。 例如,该定义D=$z:/尝试执行收件人的主目录,但如果该目录不可用,那么它将尝试在文件系统的根目录中执行。 仅在 普罗格 邮件程序上使用此命令,因为某些 shell (例如, 欧洲) 在无法读取主目录时不会执行。 由于队列目录通常无法由未授权的用户读取,因此如果将 欧洲 脚本用作收件人,那么这些脚本可能会失败。
该Userid字段指定要运行的缺省用户和组标识。 它覆盖 DefaultUser 选项 q.v。 如果还指定了 S 邮件程序标志,那么用户和组标识将在所有情况下运行。 使用表单 用户: 组 来设置用户标识和组标识。 这些变量中的任何一个都可以是整数,也可以是分别在 密码 和 组 文件中查找的符号名称。
该Charset将消息转换为 MIME 时使用字段。 它是在 Content-Type 中使用的字符集: 标题。 如果未设置,那么将使用 DefaultCharset 选项。 如果未设置 DefaultCharset ,那么值unknown-8bit启用基本映像激活的缺省 OVF。 字符集 字段将应用于 发件人 mailer; 不是收件人的 邮件程序。 例如: 如果包络发送方地址位于本地网络上,并且接收方位于外部网络上,那么将从以下位置设置字符集:Charset=本地网络邮件程序的字段,而不是外部网络邮件程序的字段。
该Type字段设置 MIME 错误消息中使用的信息类型 (由 RFC 1984 定义)。 它包含三个以斜杠分隔的值: MTA 类型 (主机如何命名的描述) ,地址类型 (电子邮件地址的描述) 和诊断类型 (错误诊断代码的描述)。 每个都必须是一个已注册的值或以X-缺省值为dns/rfc822/smtp.
邮件程序规范示例
- 要指定本地交付邮件程序,请输入:
邮件程序被称为local。它的路径名为/usr/bin/bellmail. 邮件程序将使用以下标志:Mlocal, P=/usr/bin/bellmail, F=lsDFMmn, S=10, R=20, A=mail $u规则集 10 应该应用于消息中的发送方地址。 应该将规则集 20 应用于收件人地址。 发送给邮件程序的其他信息,A字段是单词 邮件 和包含收件人姓名的单词。项 描述 l 指定本地传递。 s 从地址中除去引号。 DFM 需要Date:, From:, 和Message-ID:字段。 m 传递给多个用户。 n 不需要任何操作系统 From消息开始处的 行。
H-定义标题
发送邮件 插入到消息中的标题行的格式由 H 行定义。 本行的语法为下列其中一项:
Hhname:htemplate
H[?mflags?]hname: htemplate
H[?${macro}?hname:htemplate
此规范中的连续行直接反映到外发消息中。 htemplate 是在插入到消息之前展开的宏。 如果指定了 mflags (用问号括起来) ,那么必须在邮件程序定义中至少声明一个指定的标志,此头才能自动输出。 如果其中一个头在输入中,那么它将反映到输出中,而不考虑这些标志。
某些头具有稍后将描述的特殊语义。
辅助语法允许在读取头时对头进行验证。 要启用验证,请使用:
HHeader: $>Ruleset
HHeader: $>+Ruleset
对于指定的 标题,将调用指示的 规则集 。 与其他 check_ * 规则集一样,它可以返回$#error拒绝消息或$#discard以废弃消息。 除非使用第二种格式 $>+ ,否则头将被视为结构化字段,因此在处理之前将删除注释 (在括号中)。
HMessage-Id: $>CheckMessageId
SCheckMessageId
R<$+@$+> $@OK
R$* $#error $: Illegal Message-Id header将拒绝具有以下任何格式的 "消息标识:" 头的任何消息头:
Message-Id: <>
Message-Id: some text
Message-Id: <legal test@domain> extra textsendmail.cf 文件和 submit.cf 文件中的消息标题
配置文件中以大写字母 H开头的行将定义消息中使用的头的格式。 以下项的格式:H命令为:
H[?MailerFlags?]FieldName: Content这些变量参数定义为:
| 参数 | 定义 |
|---|---|
| MailerFlags | 确定是否H行。 此参数是可选的。 如果您提供此参数,请将其括起来? (问号)。 如果邮件程序需要此控制行所定义的字段 (如邮件程序定义的标志字段中所指示) ,那么H在格式化标题时包含控制行。 否则,H控制行被忽略。 |
| FieldName | 包含显示为标题信息中的字段的名称的文本。 典型字段名称包括From:,To:和Subject:. |
| Content | 定义在字段名称后面显示的信息。 通常,宏指定此信息。 |
下面是典型配置文件中的示例行:
| 示例 | 含义 |
|---|---|
| H?P?Return-Path: <$g> | 定义一个名为Return-Path用于显示 $g 宏的内容 (相对于接收方的发送方地址)。 该?P?部分指示仅当邮件程序使用 P 标志时才会使用此行 (邮件程序需要Return-Path行)。 仅当邮件程序具有指示的标志时,才会生成头。 如果头出现在输入消息中,那么它将在未更改的情况下传递。 |
HReceived: $?sfrom $s $.by $j ($v/$Z) id $i;
$b |
定义一个名为 Received该字段包括:
|
O 设置选项
有几个全局选项可以从配置文件进行设置。 此行的语法如下所示:
O option=value
这会将选项 相等 设置为 值。 下表中列出了受支持的选项。
| 选项 | 描述 |
|---|---|
| AliasFile=spec, spec, ... | 指定可能存在的别名文件。 每个规范都应该采用 类:: 文件 格式,其中 类:: 是可选的,如果未包含,那么缺省值为 隐式 。 根据 发送邮件 的编译方式,有效类为:
如果提供了规范列表,那么 发送邮件 将按顺序搜索这些规范。 |
| 别名等待=超时 | 在启动之前,最多等待 @:@ 条目在别名数据库中存在 超时 (单位缺省为分钟)。 如果在超时时间间隔内没有出现,且AutoRebuildAliases别名选项也已设置,则重建数据库。 否则,发出警告。 |
| AllowBogusHELO | 允许使用不包含主机名的 HELO SMTP 命令。 设置此设置将违反 RFC 1123 部分 5.2.5,但必须与多个 SMTP 客户机进行互操作。 如果有值,那么仍会检查其合法性。 |
| 空白字幕=c | 将空白替换字符设置为 C。 地址中未加引号的空格将替换为此字符。 如果未定义,那么它将缺省为空格并且不会进行替换。 |
| CACERTPath | 具有 CA 证书的目录的路径。 |
| CACERT 文件 | 包含一个 CA 证书的文件。 |
| CheckAliases | 在重建别名数据库时验证别名的 RHS。 |
| 检查点间隔时间=N | 将队列检查点时间间隔定义为发送的每个 N 地址。 如果未指定,那么缺省值为 10。 如果系统在传递到大列表期间崩溃,那么这将阻止重新传输到除最后一个收件人外的任何收件人。 |
| 类因子=fact | 所指示的 事实或乘以消息类,并从优先级中减去。 该消息类由用户头中的 优先顺序: 字段以及配置文件中的 P 行确定。 将支持具有更高 优先级: 的消息。 如果未指定,那么缺省值为 1800。 |
| ClientCertFile | 这是包含客户机的证书的文件。 当 发送邮件 充当客户机时,将使用此证书。 |
| 客户端端口选项= 选项 | 设置客户机 SMTP 选项。 选项是用逗号分隔的 键 = 值 对。 已知密钥为:
|
| ClientKeyFile | 这是包含属于客户机证书的专用密钥的文件。 |
| ColonOkInAddr | 如果设置,冒号在电子邮件地址中是可接受的,例如:
如果未设置,冒号指示 RFC 822 组构造的开始,如下图所示:
双冒号始终是可接受的,例如
并理解正确的 routeaddr 嵌套,例如:
如果配置版本级别低于 6 ,那么此选项缺省为 |
| 连接缓存大小=N | N 是一次高速缓存的已打开连接的最大数目。 如果未指定,那么缺省值为 1。 这会延迟关闭当前连接,直到此 sendmail 调用连接到另一个主机或终止为止。 将其设置为 0 将导致连接立即关闭。 由于这会使用文件描述符,因此连接高速缓存应该保持较小: 4 是实际的最大值。 |
| ConnectionCacheTimeout 超时 | 超时 是允许已高速缓存的连接处于空闲状态的最大时间量。 如果超过此时间,那么将立即关闭连接。 此值应该较小: 10 分钟是实际最大值; 缺省值为 5 分钟。 在 sendmail 使用高速缓存的连接之前,它始终发送 RSET 命令来检查连接。 如果此操作失败,那么将重新打开连接。 如果另一个结束时间超时,那么这将使您的结束时间不会失败。 |
| 仅连接至= 地址 | 可以用于覆盖连接地址以用于测试。 |
| 连接速率节流=N | 如果设置了此参数,那么在一秒内最多允许 N 个入局守护程序连接。 这是为了使峰值扁平化,并允许对负载进行平均检查。 如果未指定,那么缺省值为 0 (无限制)。 |
| 控制套接字名称= 名称 | 定义用于守护程序管理的控制套接字的名称。 可以通过此指定套接字来控制正在运行的 发送邮件 守护程序。 可用的命令为: 帮助, 重新启动, 关闭和 状态。 状态 命令返回守护程序子代的当前数目,守护程序子代的最大数目,队列目录的可用磁盘空间块数以及机器的负载平均值 (以整数表示)。 如果未设置,那么将没有可用的控制套接字。 |
| 守护进程端口选项= 选项 | 设置服务器 SMTP 选项。 DaemonPortOptions的每个实例都会导致一个额外的传入套接字。 选项为 键 = 值 对。 已知密钥为:
|
| 守护进程端口选项= 选项续。 |
|
| DefaultAuthInfo | 包含出局连接的缺省认证信息的文件名。 此文件必须包含用户标识,授权标识,密码 (纯文本) 以及要在单独的行上使用的域,并且只能由 root 用户 (或可信用户) 读取。 如果未指定域,那么将使用 $j 。 |
| 默认字符集= 字符集 | 当具有 8 位字符但不是 MIME 格式的信息转换为 MIME 格式时(参见EightBitMode选项),必须在Content-Type:标头中包含字符集。 此字符集通常是从邮件程序描述符的 字符集 = 字段中设置的。 如果未设置此选项,那么将使用此选项的值。 如果未设置此选项,那么将使用值 unknown-8bit 。 |
| 数据文件缓冲区大小= 临界值 | 在基于内存的队列数据文件变为基于磁盘之前,以字节为单位设置 阈值 。 缺省值为 4096 字节。 |
| DeadLetterDrop= 文件 | 定义系统范围的 dead.letter 文件的位置,该文件以前硬编码为 /usr/tmp/dead.letter。 如果未设置此选项, sendmail 将不会尝试保存到系统范围的 dead.letter 文件中,如果它无法将邮件弹回给用户或 postmaster。 相反,它将重命名 Qf 文件。 |
| DefaultUser=user:group | 将邮件程序的缺省用户标识设置为 用户: 组。 如果省略了 group ,并且 user 是用户名 (而不是数字用户标识) ,那么会将该用户的 /etc/passwd 文件中列出的缺省组用作缺省组。 用户 和 组 都可以是数字。 邮件程序定义中没有 S 标志的邮件程序将以此用户身份运行。 未指定时,缺省值为 1:1。 该值也可以作为符号用户名提供。 |
| 交付模式=x | 以 X方式交付。 法律模式如下:
注: 出于内部原因,如果启用了可拒绝或删除收件人的 Milter ,那么 一 将不起作用。 在此情况下,方式将更改为 B。
|
| 拨号延时=sleeptime | 如果在设置呼叫之前打开了一个连接,那么按需拨号网络连接可能会看到超时。 如果将此值设置为时间间隔,并且在尝试的第一个连接时连接超时,那么 发送邮件 将休眠此时间量并重试。 这将使您的系统有时间建立与服务提供者的连接。 单元缺省为秒,因此 DialDelay=5 将使用 5 秒延迟。 如果未指定,那么缺省值为 0 (不重试)。 |
| DontBlameSendmail =选项,选项,... | 为了避免由全局和组可写文件和目录引起的可能破解尝试, 发送邮件 会在打开其大部分支持文件时执行偏执检查。 但是,如果系统必须在具有组可写 /etc 目录的情况下运行,那么必须关闭此检查。 请注意,关闭此检查将使您的系统更容易受到攻击。 这些参数是关闭检查的个别选项:
|
|
|
|
|
|
|
|
|
安全 是缺省值。 以上描述了这些标志的详细信息。 建议不要使用该选项。 |
|
| DontExpandCnames | 标准说,邮件消息中使用的所有主机地址都必须完全规范。 例如,如果主机名为 Cruft.Foo.ORG ,并且其别名为 FTP.Foo.ORG,必须始终使用名称 Cruft.Foo.ORG 。 在主机名规范 ($[... $] 查找) 期间强制实施此操作。 如果设置了此选项,那么将忽略这些协议,并且将使用错误的名称。 但是, IETF 正在朝着更改此标准的方向发展,因此行为可能变得可接受。 请注意,下游主机可能仍会将地址重写为真正的规范名称。 |
| DontInitGroups | 如果设置, 发送邮件 将避免使用 initgroups (3) 调用。 如果您正在运行 NIS ,那么这将导致对 groups.byname 映射进行顺序扫描,这可能会导致 NIS 服务器在大域中严重超负荷。 这样做的代价是,为用户找到的唯一组将是他们的主组 (密码文件中的组) ,这将使文件访问许可权更具限制性。 对不具有组列表的系统没有影响。 |
| DontProbeInterfaces | Sendmail 通常在启动时查找机器上活动的所有接口的名称,并将其名称添加到已知主机别名的 $=w 类。 如果您具有大量虚拟接口,或者 DNS 逆向查找速度较慢,那么这可能非常耗时。 此选项会关闭探测。 但是,您需要确保通过其他某种机制将所有变体名称都包括在 $=w 类中。 |
| DontPruneRoutes | Sendmail 尝试在发送错误消息时消除任何不必要的显式路由 (如 RFC 1123 S 5.2.6中所述)。 例如,向 <@known1,@known2,@known3:user@unknown>发送错误消息时, sendmail 将从 @known1,@known2 中删除,以使路由尽可能直接。 但是,如果设置了 RR 选项,那么将禁用此选项,并且会将邮件发送到路由中的第一个地址,即使以后的地址已知也是如此。 如果您在防火墙后被捕获,那么这可能很有用。 |
| DoubleBounceAddress = 错误地址 | 如果发送错误消息时发生错误,请将错误报告发送到指示的地址。 这称为 双退 ,因为它是尝试发送另一个错误退信时发生的错误退信。 在交付时,地址是宏扩展的。 如果未设置,那么缺省为 postmaster。 |
| 项 | 描述 |
|---|---|
| 八位模式=行动 | 设置 8 位数据的处理。 有两种类型的 8 位数据:
有三种基本操作可能发生:
可能的操作是:
在所有情况下,正确声明的 8BITMIME 数据都将根据需要转换为 7BIT 。 |
| 错误标头= 文件或信息 | 在错误消息前面加上指示的消息。 如果它以斜杠 (/) 开头,那么将假定它是包含消息的文件的路径名,这是建议的设置。 否则,它是文字消息。 此错误文件可能包含可以向最终用户提供帮助的本地 postmaster 的名称,电子邮件地址和/或电话号码。 如果该选项缺失或为空,或者如果它指定了不存在或不可读的文件,那么不会显示任何消息。 |
| ErrorMode=x | 使用方式 X处理错误。 X 的值为:
|
| .llbackMXhost=fallbackhost | 如果指定了此参数,那么 Fallbackhost 将在每个主机上充当非常低优先级的 MX。 这旨在供网络连接不太连接的站点使用。 由于临时地址故障(如 DNS 故障)而无法发送的信息也会发送到FallBackMX主机。 |
| FallBackSmartHost=hostname | 如果指定,FallBackSmartHost将用于每台主机的最后一搏。 |
| FastSplit | 如果设置为大于零的值 (缺省值为 1) ,那么在最初对地址进行排序时 (即,首次交付尝试时) ,将禁止对这些地址进行 MX 查找。 这通常会导致更快的包络分割,除非 MX 记录在本地 DNS 高速缓存中随时可用。 |
| ForkEachJob | 如果已设置,请在单独的进程中交付从队列运行的每个作业。 如果您缺少内存,请使用此选项,因为在处理队列时,缺省值往往会消耗相当大的内存量。 |
| 前向路径= 路径 | 设置用于搜索用户的 .forward 文件的路径。 缺省值为 $z/.forward。 某些使用自动安装程序的站点可能更愿意将其更改为 /var/forward/$u ,以在系统目录中搜索与用户同名的文件。 也可以将其设置为以冒号分隔的路径序列。 Sendmail 在它可以成功且安全地打开的第一个文件处停止。 例如,将首先在 /var/forward/username 中进行搜索,然后在 ~username/.forward中进行搜索,但仅当第一个文件不存在时才会进行搜索。 |
| 帮助文件=文件 | 指定 SMTP 的帮助文件。 如果未指定文件名,那么将使用 helpfile 。 |
| HoldExpensive | 如果将出局邮件程序标记为高成本,请不要立即连接。 这需要进行排队编译,因为它将依赖于队列运行过程来实际发送邮件。 |
| 主机文件= 路径 | 指定主机数据库的路径,通常为 /etc/hosts。 仅当 发送邮件 正在对地址进行规范时,才会咨询此选项,而仅当 主机 服务切换条目中存在 文件 时,才会咨询此选项。 尤其是,在查找主机地址时,从不使用此文件; 此文件受系统 gethostbyname (3) 例程的控制。 |
| 主机状态目录= 路径 | 设置长整型主机状态信息的位置。 设置后,将在所有 发送邮件 进程之间共享有关主机状态的信息 (例如,主机是否关闭或不接受连接)。 通常,此信息仅保存在单个队列运行中。 此选项需要至少 1 的连接高速缓存才能起作用。 如果选项以前导 /开头,那么它是绝对路径名; 否则,它相对于邮件队列目录。 需要持久主机状态的站点的建议值为 .hoststat,它是队列目录的子目录。 |
| IgnoreDots | 忽略入局消息中的点。 在阅读 SMTP 邮件时,始终会禁用此功能,因此始终会接受点。 |
| LD AP默认规范=规范 | 设置 LDAP 映射的缺省映射规范。 该值应仅包含特定于 LDAP 的设置,例如 -h host -p port -d bindDN。 除非个别映射规范覆盖设置,否则这些设置将用于所有 LDAP 映射。 应该在定义任何 LDAP 映射之前设置此选项。 |
| 日志级别=n | 将日志级别设置为 N。 缺省值为 9。 |
| Mxvalue | 将宏 X 设置为值。 这仅旨在从命令行使用。 -M 标志是首选标志。 |
| MatchGECOS | 允许在 GECOS 字段上进行模糊匹配。 如果设置了此标志,并且通常的用户名查找失败 (即,没有此名称的别名,并且 盖特普南 失败) ,请在 GECOS 字段中按顺序搜索密码文件以查找匹配的条目。 这还要求在编译期间开启 MATCHGECOS 。 建议不要使用此选项。 注: 仅在 NIS 模块和系统中的本地用户上执行模糊匹配。
|
| 最大别名递归=N | N 是别名递推的最大深度。 默认为10。 |
| 最大守护进程=N | 如果设置了此参数,那么当 发送邮件 具有超过 N 个处理待收邮件或自动队列运行的子代时,它将拒绝连接。 这不会限制出局连接的数量。 如果未设置,那么对子代的数量没有限制; 系统负载平均值将控制此值。 如果使用缺省 DeliveryMode (后台) ,那么 sendmail 可能会创建几乎无限数量的子代 (取决于事务数以及邮件接收和邮件传递的相对执行时间)。 如果应该强制实施限制,那么必须使用除后台以外的 DeliveryMode 。 如果未设置,那么对子代数没有限制,即,系统负载平均值将控制此值。 |
| 最大报头长度=N | N 是所有头的最大长度之和。 这可以用于防止拒绝服务攻击。 缺省值为无限制。 |
| 最大跳数=N | 最大中继段计数。 已处理超过 N 次的消息将被假定为处于循环中,并且将被拒绝。 默认为25。 |
| 最大信息量=N | 指定要在 ESMTP EHLO 响应中公布的最大消息大小。 大于 N 的消息将被拒绝。 |
| MaxMimeHeaderLength =N[/M] | 将某些 MIME 头字段值的最大长度设置为 N 个字符。 如果指定了 M ,那么采用参数的某些头将使用 M 而不是 N。 如果未指定 M ,那么这些头将使用 N的一半。 缺省情况下,这些值为 0,这指示未执行任何检查。 |
| 最大队列运行大小=N | N 是将在单个队列运行中处理的作业的最大数目。 如果未设置,那么不会对大小进行限制。 如果您具有非常大的队列或非常短的队列运行时间间隔,那么这可能是不稳定的。 但是,由于队列目录顺序中的前 N 个作业是运行的 (而不是 N 个最高优先级作业) ,因此应尽可能将其设置为高,以避免丢失正好落在队列目录中的作业。 注: 此选项还会限制 邮件打印的条目数。 也就是说,如果MaxQueueRunSize设置的值 N 大于零,那么每个队列组只能打印 N 个条目。
|
| MaxRecipientsPerMessage =N | SMTP 事务中每个消息将接受的最大收件人数。 如果未设置,那么对于每个包络的收件人数量没有限制。 注: 将此设置得过低可能会干扰从使用 SMTP 进行初始提交的 MUA 发送邮件。
|
| MeToo | 也发给我,即使我是在别名扩展中。 不推荐使用此选项,将从未来版本中移除此选项。 |
| 最小自由块=N | 在通过 SMTP 接受电子邮件之前,在保存队列文件的文件系统上至少设置 N 个可用块。 如果没有足够的空间, 发送邮件 将对 邮件 命令发出 452 响应,并邀请发送方稍后重试。 |
| 最小队列年龄=年龄 | 请勿处理任何已排队的作业,这些作业已在队列中的时间间隔小于指示的时间间隔。 这会通过频繁处理队列来提高系统响应能力,而不需要频繁尝试作业来对系统进行负担。 缺省单位为分钟。 |
| 必须引用字符=s | 设置在 phrase <address> 语法的短语部分中的全名中使用时必须加引号的字符列表。 缺省值为 '.。 字符 @,;:\()[] 始终添加到此列表中。 |
| NoRecipientAction | 接收到没有有效收件人头 (例如
|
| OldStyleHeaders | 假定头可能采用旧格式,并带有空格来定界名称。 这实际上开启了一种自适应算法: 如果任何收件人地址包含逗号,括号或尖括号,那么将假定逗号已存在。 如果此标志未启用,那么仅以逗号对名称进行定界。 头始终以逗号在名称之间输出。 缺省值为 off。 |
| 操作符字符=charlist | 被认为是运算符的字符列表,即,用于对标记进行定界的字符。 所有运算符字符本身都是标记; 非运算符字符的序列也是标记。 空格字符分隔标记,但它们本身不是标记。 例如, AAA.BBB 有三个令牌,但 AAA BBB 有两个令牌。 如果未设置,那么 OperatorChars 缺省为 .:@[]"。 此外,字符 "()<>,;" 始终是运算符。 请注意,必须先在配置文件中设置 OperatorChars ,然后再设置任何规则集。 |
| 进程 ID文件=文件名 | 设置 pid 文件的 文件名 。 默认为PATHSENDMAILPID。 文件名在打开之前是宏扩展的。 |
| PostmasterCopy=邮政局长 | 如果设置,错误消息的副本将发送到指定的 邮差。 仅发送失败的消息的头。 将不会发送由具有负优先顺序的消息产生的错误。 因为大多数错误都是用户问题,这在大站点上不是一个好主意,可能包含隐私违规。 在交付时,地址是宏扩展的。 缺省值为 no postmaster copies。 |
| PrivacyOptions=opt,opt,... | 设置隐私选项。 这些都是坚持更严格地遵守 SMTP 协议的一种方式。 这些选项可以是下列其中一项:
|
| 选项 | 描述 |
|---|---|
| 流程标题前缀=字符串 | 使用 串作为 ps 列表上显示的流程标题的前缀。 将对该字符串进行宏处理。 |
| 队列目录=dir | 使用指定的 迪尔 作为队列目录。 要使用多个队列,请提供以星号结尾的值。 例如,输入 /var/spool/mqueue/q* 将使用所有目录或以 /var/spool/mqueue 中的 q 开头的目录的符号链接作为队列目录。 当 sendmail 正在运行时,请勿更改队列目录结构。 |
| 队列因子= 因子 | 使用 因素 作为映射函数中的乘数,以决定何时只对作业进行排队,而不运行这些作业。 此值除以当前负载平均值与负载平均值限制 (QueueLA 选项) 之间的差值,以确定将发送的最大消息优先级。 默认为600000。 |
| 队列LA=LA | 当系统平均负载超过 洛杉矶时,仅对消息进行排队,而不要尝试发送这些消息。 缺省值为 8 乘以系统上联机的处理器数 (如果可以确定)。 |
| QueueSortOrder=算法 | 设置用于对队列进行排序的 算法 。 仅使用该值的第一个字符。 合法值为:
|
| 队列超时= 超时 | 请不要使用。 使用 Timeout.queuereturn。 |
| RandFile | 包含随机数据的文件的名称或套接字的名称 (如果使用了 EGD)。 必需的前缀 egd: 或 file: 指定类型。 如果未设置编译标志 HASURANDOM (请参阅 /user/samples/tcpip/sendmail/README) ,那么 STARTTLS 需要此文件名。 |
| 解析器选项= 选项 | 设置解析器选项。 可以使用 +旗 设置值,并使用-旗清除值。 可用标志为:
可以指定字符串
HasWildcardMX (不带 + 或 -) 以在执行名称规范化时对 MX 记录关闭匹配。注: 在前发行版中,此选项指示名称服务器为了接受地址而进行响应。 已通过检查以确定 DNS 方法是否列示在主机服务的服务切换项中来替换此选项。
|
| RrtImpliesDsn | 如果设置了此选项,那么 ReturnReceipt-To: 头会导致根据 RFC1891的要求将 DSN 请求发送到包络发送方,而不是发送到头中给定的地址。 |
| 作为用户运行= 用户 | 用户参数可以是用户名 (在 /etc/passwd中查找) 或数字用户标识。 任一表单都可以连接 :group , 组 可以是数字或符号。 如果设置为非零/非 root 用户值,那么 sendmail 将在启动后立即更改为此用户标识。 这就避免了一定种类的安全问题。 但是,这意味着所有 .forward 和 :include: 文件都必须由指定的用户可读,并且要写入的所有文件都必须由 用户可写。 此外,所有文件和程序的传送都将被标记为不安全,除非设置了 "DontBlameSendmail=NonRootAddrSafe选项,在这种情况下,传送将以 "用户的方式进行。 它还与SafeFileEnvironment选项不兼容。 在一般系统上,它可能实际上不会对安全性增加太多,并且可能实际上会降低安全性,因为必须放宽其他文件许可权。 但是,它可能在防火墙和其他用户没有帐户且别名文件受到良好约束的地方非常有用。 |
| 收件人因素=fact | 所指示的 事实或添加到每个收件人的优先级,从而降低作业的优先级。 此值将惩罚具有大量收件人的作业。 缺省值为 30000。 |
| 拒绝 LA=LA | 当系统平均负载超过 洛杉矶时,拒绝入局 SMTP 连接。 缺省值为 12 乘以系统上的联机处理器数 (如果可以确定的话)。 |
| 重试因子=fact | 每次处理作业时,都会将 事实或添加到优先级。 每次处理作业时,它的优先级都将降低指定的值。 在大多数环境中,这应该是正面的,因为停机的主机可能会停机很长时间。 默认为90000。 |
| 安全文件环境=dir | 如果设置了此选项,那么 发送邮件 将在执行任何文件写入之前对指示的目录执行 chroot (2) 调用。 如果用户指定的文件名以 迪尔开头,那么该部分路径名将在写入之前被删除。 例如,如果SafeFileEnvironment变量设置为 "/safe,那么 "/safe/logs/file和 "/logs/file的别名实际上表示的是同一个文件。 此外,如果设置了此选项,那么 sendmail 将拒绝传递到符号链接。 |
| SaveFromLine | 将 自 行保存在标题前面。 它们被假定为冗余并被废弃。 |
| SendMimeErrors | 如果已设置,请以 MIME 格式发送错误消息 (请参阅 RFC2045 和 RFC1344 以获取详细信息)。 如果禁用, 发送邮件 将不会返回 DSN 关键字以响应 EHLO ,并且不会执行 "传递状态通知" 处理,如 RFC1891中所述。 |
| ServerCertFile | 包含服务器的证书的文件。 当 发送邮件 充当服务器时,将使用此证书。 |
| ServerKeyFile | 包含属于服务器证书的专用密钥的文件。 |
| 服务切换文件=filename | 如果您的主机操作系统具有服务切换抽象功能,那么将参考该服务并忽略此选项。 否则,这是一个文件的名称,该文件提供用于实现特定服务的方法列表。 语法是一系列的行,每个行都是一个单词的序列。 第一个词是服务名称,后面的词是服务类型。 发送邮件 直接咨询的服务是 别名 和 主机。 服务类型可以是 丁斯, 尼斯或 文件。 必须先编译相应的支持,然后才能引用该服务。 如果未指定ServiceSwitchFile,则默认为/etc/mail/service.switch。 如果该文件不存在,那么缺省开关为缺省文件为 /etc/mail/service.switch。 |
| SevenBitInput | 将输入剥离到 7 位以与旧系统兼容。 这不应该是必要的。 |
| SingleLineFromHeader | 如果设置了此项,那么会将嵌入了换行符的 来源: 行解包到一行中。 这是为了避免Lotus Notes中的一个错误,该错误显然无法理解合法封装的RFC822标头。 |
| SingleThreadDelivery | 如果设置了此选项,那么即使在不同的进程中,客户端机器也不会尝试同时打开与单个服务器的两个 SMTP 连接。 即,如果另一个 发送邮件 已在与某个主机进行对话,那么新的 发送邮件 将不会打开另一个连接。 虽然这减少了另一台机器上的负载,但可能会导致邮件延迟。 例如,如果一个 发送邮件 正在传递巨大的消息,那么其他 发送邮件 进程将无法发送哪怕是小的消息。 此外,每个连接还需要另一个文件描述符(用于锁文件),因此可能需要减少ConnectionCacheSize选项,以避免每个进程的文件描述符用完。 需要HostStatusDirectory选项。 |
| SmtpGreetingMessage =消息 | 指定在 SMTP 服务器启动时要打印的 消息 。 缺省值为 |
| StatusFile=文件 | 在指定的 文件中记录摘要统计信息。 如果未指定文件名,那么将使用 statistics 。 如果未设置,那么将不会保存任何摘要统计信息。 此文件的大小不会增大。 可以使用 mailstats (8) 程序进行打印。 |
| SuperSafe | 始终将队列文件实例化,即使您要尝试立即交付也是如此。在任何情况下, Sendmail 总是在将控制权返回给客户机之前将队列文件实例化。 应该始终设置此值。 |
| 临时文件模式= 模式 | 指定队列文件的文件方式。 缺省情况下,它以八进制进行解释。 默认为0600。 |
| Timeout.type= 超时 | 设置 超时 值。 有关更多信息,请参阅 读超时。 |
| 时区规范=tzinfo | 将本地时区信息设置为 tzinfo。 如果未设置此参数,那么将清除 TZ 环境变量并使用系统缺省值。 如果设置为空,那么将使用用户的 TZ 变量。 如果设置为非空,那么 TZ 变量将设置为该值。 |
| 受托用户= 用户 | 用户参数可以是用户名 (在 /etc/passwd中查找) 或数字用户标识。 文件所有权和启动守护程序的可信用户。 如果设置,那么此用户将自动拥有生成的别名数据库和控制套接字 (如果已配置)。 |
| TryNullMXList | 如果此系统是给定主机的 best (即,最低首选项) MX ,那么其配置规则应检测此情况并特别通过将邮件转发到 UUCP 订阅源,将其视为本地等方式来处理该情况。 但是,在某些情况下 (例如,在具有因特网防火墙的情况下) ,您可能希望尝试直接连接到该主机,就好像它完全没有 MX 记录一样。 设置此选项将导致 sendmail 尝试此操作。 不幸的是,配置中的错误可能被诊断为 "主机未知" 或 "消息超时" ,而不是更有意义的内容。 建议不要使用此选项。 |
| Uni xFromLine=fromline | 定义当 sendmail 必须添加 UNIX样式的 From 行 (例如以 From<space>user开头的行) 时使用的格式。 缺省值为 From $g $d。 除非您的系统使用不同的邮箱格式,否则请勿更改此格式。 |
| UnsafeGroupWrites | 如果设置了此项,那么组可写的 :include: 和 .forward 文件将被视为不安全,并且它们将无法引用程序或直接写入文件。 全局可写 :include: 和 .forward 文件始终不安全。 |
| UserDatabaseSpec =udbspec | 用户数据库规范。 |
| 详细 | 以详细方式运行。 如果设置了此选项,那么 sendmail 会调整选项 HoldExpensive 和 DeliveryMode ,以便在单个作业中完全传递所有邮件,以便您可以看到整个传递过程。 不应在配置文件中设置 详细 选项; 此选项仅供命令行使用。 |
| XscriptFileBufferSize = 阈值 | 在基于内存的队列脚本文件变为基于磁盘之前,以字节为单位定义 阈值 。 缺省值为 4096 字节。 |
所有选项都可以在命令行上使用 -O 或 -o 标志指定,但大多数选项会导致 发送邮件 放弃其 setuid 许可权。 The options that will not cause this are SevenBitInput, 八位模式, 最小自由块, 检查点间隔, 交付模式, 错误模式, 忽略点, SendMimeErrors, 日志级别, 旧式页眉, 隐私选项, 超级安全, 冗长, 队列排序顺序, 最小队列年龄, 默认字符集, 拨号延时, 无收件人行动, ColonOkInAddr, 最大队列运行大小, SingleLineFromHeader, and AllowBogusHELO. 实际上,在命令行中给出的PrivacyOptions会添加到配置文件中已指定的选项中,且无法重置。 另外,定义 R 或 S 宏时的 M (定义宏) 也被认为是安全的。
P-优先顺序定义
Pname=num在 "Precedence:" 字段中找到该名称时,消息类将设置为 num。 数字越大,表示优先顺序越高。 小于零的数字具有特殊属性,如果在处理期间发生错误,那么将不会返回消息主体; 这预期将用于 "批量" 邮件 (例如通过邮件列表)。 缺省优先顺序为零。 例如,缺省优先顺序的列表为:
- Pfirst-class=0
- Pspecial-delivery=100
- Plist=-30
- Pbulk=-60
- Pjunk=-100
V-配置版本级别
为了提供与旧配置文件的兼容性,已添加了 五 行以定义配置文件的基本语义。 这是 不 作为长期支持而设计的。 在未来发行版中可能会移除这些兼容性功能。
将 "旧" 配置文件定义为版本级别 1。
版本级别 2 文件进行以下更改:
- 主机名规范化 ($[... $]) 会附加一个点 (如果识别到该名称)。 这为配置文件提供了一种确定是否发生匹配的方法。 这将使用 -好的 初始化主机映射 标志来指定安装选项。 您可以通过显式声明映射来将其重置为其他任何内容。
- 缺省主机名扩展在整个处理过程中保持一致。 版本级别 1 配置通过添加本地域名在处理中的某些点期间关闭域扩展。 版本级别 2 配置包含一个尾部点,用于指示名称已规范。
- 非别名的本地名称将通过新的专有规则集 5 进行传递。 这可以用于附加本地中继设备。 可以通过使用 @ 符号作为前缀 (例如,
@vikki) 来解析局部名来阻止此操作。 解析为本地邮件程序且用户名为vikki的内容将通过规则集 5 传递,但@vikki的用户名将除去 @ 前缀,不会传递到规则集 5 ,否则将与先前示例相同。 例外情况是,这可能用于实现以下策略: 发送到 vikki 的邮件由中心中心处理,但发送到 vikki@localhost 的邮件直接传递。
版本级别 3 文件允许在所有行上发出 # 个已启动的注释。 例外是反斜杠转义 # 标记和 $# 语法。
版本级别 4 文件等价于级别 3 文件。
版本级别 5 文件将 $w 的缺省定义更改为主机名的第一个组件。
版本级别 6 配置文件将许多本地处理选项 (即,别名和匹配 | 字符的开头地址) 更改为邮件程序标志。 这允许对特殊本地处理进行细颗粒度控制。 版本级别 6 文件也可能使用长选项名称。 在版本号较低的配置文件中,ColonOkInAddr选项(允许在地址的本地部分使用冒号)默认为开启。 该配置文件需要额外的 "智能" 才能正确处理 RFC 822 组构造。
版本级别 7 配置文件使用新选项名称来替换旧宏。
| 选项 | 旧宏 |
|---|---|
| $e 变为 | SmtpGreetingMessage |
| $1 变为 | UnixFromLine |
| $o 变为 | OperatorChars |
在版本 7 之前,假定为 F = q 标志 (对于 SMTP VRFY 命令,请使用返回值 250 而不是 252)。
版本级别为 8 的配置文件允许 $# 位于规则集行左侧。
版本级别 9 配置文件允许在规则集中使用括号,这意味着这些文件不会被视为注释并被除去。
五 行可能具有可选的 /供应商 变量,用于指示配置文件使用特定于供应商的修改。 您可以使用/Berkeley以指示该文件使用 Berkeley 发送邮件 方言。
K-密钥文件声明
Kmapname mapclass argumentsmapname 是在重写规则中引用此映射时所使用的名称。 mapclass 是某种类型的映射的名称; 这些映射是编译到 发送邮件。 参数将根据类进行解释; 通常,会有单个参数对包含映射的文件进行命名。
$( map key $@ arguments $: default $)其中可省略自变量或缺省部分中的任何一个或全部。 $@ 参数可能多次出现。 指示的键和参数将传递到相应的映射函数。 如果它返回值,那么将替换输入。 如果它未返回值并且指定了缺省值,那么缺省值将替换输入。 否则,输入将保持不变。
R$- ! $+ $: $(uucp $1 $@ $2 $: %1 @ %0 . UUCP $)decvax %1@ %0.DEC.COM
research %1@%0.ATT.COM
$(host hostname$)$[hostname$]有许多已定义的类。
| 类 | 描述 |
|---|---|
| dbm | 使用 ndbm(3) 库进行数据库查找。 必须在定义了 NDBM 的情况下编译 Sendmail 。 |
| btree | 使用到 Berkeley 数据库库的 btree 接口进行数据库查找。 必须在定义了 NEWDB 的情况下编译 Sendmail 。 |
| hash | 使用到 Berkeley 数据库库的散列接口进行数据库查找。 必须在定义了 NEWDB 的情况下编译 Sendmail 。 |
| nis | NIS 查找。 必须在定义了 NEWDB 的情况下编译 Sendmail 。 |
| ldap | LDAP X500 目录查找。 必须在定义了 LDAPMAP 的情况下编译 Sendmail 。 该映射支持 Ldapsearch 程序的大部分标准参数和命令行参数。 缺省情况下,如果单个查询与多个值匹配,那么将仅返回第一个值,除非设置了 -z (值分隔符) 映射标志。 此外, -1 映射标志会将多值返回视为不存在任何匹配项。 |
| Ldapx | LDAP X500 目录查找。 必须在定义了 LDAPMAP 的情况下编译 Sendmail 。 该映射支持 Ldapsearch 程序的大部分标准参数和命令行参数。 |
| 文本 | 文本文件查询数。 文本文件的格式由 -k (关键字段号) , -v (值字段号) 和 -z (字段定界符) 标记定义。 |
| 刺 | 内部符号表查找。 在内部用于别名判别。 |
| IMPLICIT | 真的应该叫 "别名"。 这用于获取别名文件的缺省查找,如果没有为别名文件指定任何类,那么此值为缺省值。 |
| 用户 | 使用 getpwnam(3)查找用户。 -v 标志可用于指定要返回的字段的名称 (尽管这通常仅用于检查用户是否存在)。 |
| 主机 | 将主机域名规范为规范。 给定主机名时,它将调用名称服务器以查找该主机的规范名称。 |
| 贝斯特姆克斯 | 返回作为密钥给定的主机名的最佳 MX 记录。 当前机器始终是首选机器。 例如,如果当前机器是列示为最低首选项 MX 记录的其中一个主机,那么将保证返回该主机。 这可以用于确定此机器是否是 MX 记录的目标,并且可以在此基础上接受邮件。 如果给定了 -z 标志,那么将返回所有 MX 名称 (以给定定界符分隔)。 |
| SEQUENCE | "K" 行上的参数是映射列表; 生成的映射将按顺序搜索参数映射,直到找到所指示键的匹配项为止。 例如,如果关键字定义为:
那么针对 "seqmap" 的查找首先在 map1中执行查找。 如果找到该值,那么它将立即返回。 否则,将对 map2使用同一键。 |
| syslog | 通过 syslogd(8)记录密钥。 查找将返回空字符串。 |
| switch | 与 "序列" 映射非常相似,只是映射的顺序由服务开关决定。 参数是要查找的服务的名称; 服务开关中的值将追加到映射名称以创建新的映射名称。 例如,请考虑键定义:
以及服务切换条目:
这将导致针对映射 "ali" 的查询按该顺序搜索名为 "ali.nis" 和 "ali.files" 的映射。 |
| 取消引用 | 除去双引号 (") 从名称中获取。 如果生成的字符串包含不可扫描的语法 (即,基本错误 (例如不平衡的尖括号); 不检查更复杂的错误 (例如未知主机)) ,那么它不会删除反斜杠,也不会删除引号。 意图是在尝试接受来自诸如 DECnet 之类的系统的邮件时使用,这些系统经常引用奇怪的语法,例如:
典型的用法可能如下所示:
必须注意防止出现意外结果; 例如,
将除去引号,但结果可能不是预期的结果。 幸运的是,这些案例是罕见的。 |
| regex | K 行上的映射定义包含一个正则表达式。 使用 POSIX 正则表达式例程 regcomp (), regerr ()和 regexec ()将任何键输入与该表达式进行比较。有关正则表达式匹配的更多信息,请参阅这些例程的文档。 如果使用 命令 标志,那么不会对键进行重写。 如果不使用它,那么将废弃该键,或者如果使用 -s ,那么它将替换为子串匹配项 (由 $| 或使用 -d 标志指定的字符串定界)。 可用于映射的标志如下所示:
-s 标志可以包含一个可选参数,该参数可用于在查找结果中选择子字符串。 例如,-s1,3,4. |
| PROGRAM | K 行上的参数是程序的路径名和要传递的任何初始参数。 调用映射时,会将键添加到初始参数中,并将程序作为缺省用户/组标识进行调用。 标准输出的第一行将作为查找的值返回。 这有许多潜在的安全问题和可怕的性能。 只有在绝对必要时才应使用。 |
| 宏 (macro) | 设置或清除宏值。 要设置宏,请将该值作为映射查找中的第一个参数传递。 要清除宏,请不要在映射查询中传递参数。 该映射始终返回空字符串。 典型用法的示例包括:
|
| 阿里特 | 执行简单算术运算。 该操作作为键提供,当前支持
|
其中大部分接受相同的可选标志和文件名 (或 NIS 的映射名; 文件名是数据库路径的根,因此将添加 .db 或适合于数据库类型的其他扩展名以获取实际数据库名称) 作为参数。 已知标志为:
| 标志 | 描述 |
|---|---|
| -O | 指示此映射是可选的。 即,如果无法打开该映射,那么不会生成任何错误,并且 发送邮件 将像映射存在但为空一样运行。 |
| -N, -O | 如果未指定 -N 或 -O ,那么 发送邮件 将使用自适应算法来决定是否在密钥结束时查找空字节。 它首先尝试这两者; 如果它找到任何具有空字节的键,那么它不会在没有空字节的情况下再次尝试,反之亦然。 如果指定了 -N ,那么它将从不尝试不使用空字节; 如果指定了 -O ,那么它将从不尝试使用空字节。 设置其中一个可速度匹配项,但从不需要。 如果同时指定了 -N 和 -O ,那么 发送邮件 将永远不会尝试任何匹配项。 就是一切都将出现失败的现象。 |
| 一 X | 在成功匹配时追加字符串 X 。 例如,缺省主机映射在成功的匹配项上附加一个点。 |
| -T X | 在临时故障时追加字符串 x。 例如,如果返回 DNS 查找,那么将附加 xserver failed或 NIS 查找无法找到服务器。 请参阅 -t 标志以获取更多信息。 |
| -f | 在查找密钥之前,请不要折叠大写到小写。 |
| -M | 仅匹配 (不替换值)。 如果您只关心存在键而不关心值 (例如,搜索 NIS 映射 "hosts.byname" 时) ,那么此标志会阻止映射替换该值。 但是, 一 参数仍附加在匹配项上,并且在匹配项失败时仍采用缺省值。 |
| -k 凯科尔 | 键列名 (对于 NIS) 或数字 (对于文本查询)。 |
| -v 瓦尔科尔 | 值列名 (对于 NIS) 或值列名 (对于文本查询)。 |
| -z 代利姆 | 列定界符 (用于文本查找)。 它可以是单个字符,也可以是特殊字符串 "\n" 或 "\t" 之一,分别指示换行符或制表符。 如果完全省略,那么列分隔符是空格的任何序列。 |
| -t | 通常,当映射尝试执行查找并且服务器失败 (例如, 发送邮件 无法联系任何名称服务器-这与在映射中找不到的条目相同 不 ) 时,正在处理的消息将排队等待将来处理。 -t 标志会关闭此行为,使临时故障 (服务器关闭) 如同它是永久性故障 (找不到条目) 一样运行。 它对于 DNS 查找特别有用,因为另一个错误配置的名称服务器可能会在您的机器上导致问题。 必须注意避免 "弹回" 邮件,如果进行另一次尝试,将正确解决此问题。 常见的策略是将此类邮件转发到另一个邮件服务器。 |
| -D | 在延迟交付方式下不执行查找。 缺省情况下,为 主机 映射设置此标志。 |
| -S 航天公司 /spacesub | 在映射查找成功后要用于替换空格字符的字符。 这对于 雷格克斯 和 系统日志 映射特别有用。 |
| -q | 在查找之前不要对该键取消引号。 |
| -一个 | 在重新构建别名文件时, -一个 标志会导致合并文本版本中的重复条目。 例如,下面这两个条目:
将被视为好像它们是以下单个条目:
|
以下附加标志仅在 LDAP 映射中显示:
| 标志 | 描述 |
|---|---|
| -R | 请勿自动跟踪引荐。 必须使用 -DLAP_RE荐 编译 Sendmail 才能使用此标志。 |
| -n | 仅检索属性名称。 |
| -r 代参考 | 将别名取消引用选项设置为下列其中一个选项: 从不, 始终, 搜索或 找。 |
| -s 范围 | 将搜索范围设置为下列其中一项: 基, 一 (一个级别) 或 子 (子树)。 |
| -h 主机 | LDAP 服务器主机名。 |
| -b 基 | LDAP 搜索条件。 |
| -p 端口 | LDAP 服务端口。 |
| -我 时间限制 | LDAP 查询的时间限制。 |
| -Z 大小限制 | LDAP 查询的大小 (匹配数) 限制。 |
| -d 可区分的名称 | 要用于登录到 LDAP 服务器的专有名称。 |
| -M 方法 | 向 LDAP 服务器进行认证的方法。 应该是下列其中一项: LDAP_AUTH_NONE, LDAP_AUTH_SIMPLE, OR LDAP_AUTH_KRBV4。 |
| -P 密码文件 | 包含 LDAP_AUTH_SIMPLE 认证方法的密钥或 LDAP_AUTH_KRBV4的 Kerberos 凭单文件的名称的文件。 |
| -1 | 仅当找到单个匹配项时,才强制 LDAP 搜索成功。 如果找到多个值,那么将像找不到匹配项一样进行搜索。 |
Kuucp dbm -o -N /usr/lib/uucpmap指定名为 "dbm" 类的 "uucp" 的可选映射; 它始终在每个字符串的末尾具有空字节,并且数据位于 /usr/lib/uucpmap中。{dir , pag}。
命令和操作
| 命令和操作 | 描述 |
|---|---|
| C XWord1 Word2... | 定义可以用于与重写规则左侧匹配的词类。 类说明符 (X) 可以是 ASCII 字符集中的任何大写字符。 保留小写字母和特殊字符以供系统使用。 |
| D X 值 | 定义宏 (X) 及其关联的 值。 宏说明符可以是 ASCII 字符集中的任何大写字母。 保留小写字母和特殊字符以供系统使用。 |
| F XFileName [格式] | 使用可选的 scanf 格式说明符从 FileName 变量读取类 (X) 的元素。 格式说明符仅包含一个转换规范。 为 FileName 变量中的每行读取一个类号。 |
| H [?MFlags?]标题名称: HeaderTemplate | 定义 发送邮件 命令插入到消息中的头格式。 连续行是该定义的一部分。 HeaderTemplate 在插入到消息中之前进行了宏扩展。 如果指定了 MFlags ,并且至少有一个指定的标志包含在邮件程序定义中,那么此头会自动写入输出消息。 如果头出现在输入消息中,那么会将其写入输出消息,而不考虑 MFlags 变量。 |
| M 姓名, [字段=值] | 定义 Mail 程序,其中 姓名 变量是 Mail 程序的名称, 字段=值 对定义了邮件程序的属性。 |
| O X[值] | 将选项设置为 十. 的值 如果该选项是一个值选项,那么还必须指定 值 变量。 也可以从命令行中选择选项。 注: 有关有效值,请参阅 O 设置选项。
|
| P 名称 = 数字 | 定义以下对象的值:Precedence:头字段。 当在消息中找到 姓名 变量时Precedence:字段,消息的优先顺序设置为 数字 变量。 较大的数字表示较高的优先顺序。 负数表示未返回错误消息。 缺省 数字 为 0。 |
| R LeftHandSide RightHandSide评论 | 定义重写规则。 一个或多个跳进字符分隔此命令的三个字段。 如果使用空格字符作为字段分隔符,那么必须设置选项 J 。 J 选项允许空格以及选项卡分隔重写规则的左/右两侧。 J 选项允许使用将选项卡替换为空格的编辑器来修改重写规则。 |
| S X | 将当前定义的规则集设置为指定的数字 (X)。 如果一个规则集定义多次启动,那么新定义将覆盖旧定义。 |
| T User1User2... | 定义系统管理员的用户标识。 这些标识具有使用 - 标志覆盖发送方地址的许可权。 每行可以指定一个以上的标识。 |
文件
| 项 | 描述 |
|---|---|
| /etc/mail/sendmail.cf | 指定 sendmail.cf 文件的路径。 |
| /etc/mail/submit.cf | 指定 submit.cf 文件的路径。 |
| /etc/passwd | 包含基本用户属性。 |
| /etc/mail/aliases | 包含 发送邮件 命令的别名定义。 |