您可以指定 SMTP 通道是否支持特定的 SMTP 命令,例如 EHLO、ETRN、EXPN 和 VRFY。您也可以指定通道是否支持 DNS 域验证,通道接受为行终止符的字符等。本节说明了以下内容:
表 12–21 汇总了本节中说明的关键字。
表 12–21 SMTP 命令和协议关键字
通道关键字 |
说明 |
---|---|
协议选定和行终止符 |
指定通道是否支持 SMTP 协议并指定接受为行终止符的字符序列。 |
smtp |
支持 SMTP 协议。关键字 smtp 对所有 SMTP 通道都具有强制性。(此关键字等效于 smtp_crorlf。) |
nosmtp |
不支持 SMTP 协议。该值为默认值。 |
smtp_cr |
接受以回车 (CR)(不跟换行符 [LF])终止的行。 |
smtp_crlf |
必须以回车 (CR) 加换行符 (LF) 序列终止行。 |
smtp_lf |
接受以换行符 (LF)(前面没有 CR)终止的行。 |
smtp_crorlf |
可以使用回车 (CR)、换行符 (LF) 序列或完整的 CRLF 终止行。 |
EHLO 关键字 |
指定通道处理 EHLO 命令的方式 |
ehlo |
在初始连接中使用 SMTP EHLO 命令。 |
checkehlo |
检查 SMTP 响应标题,以确定使用 EHLO 还是 HELO。 |
noehlo |
不使用 EHLO 命令。 |
ETRN 关键字 |
指定通道处理 ETRN 命令(请求队列处理)的方式 |
allowetrn |
执行 ETRN 命令。 |
blocketrn |
阻止 ETRN 命令。 |
domainetrn |
仅执行指定域的那些 ETRN 命令。 |
silentetrn |
执行 ETRN 命令,不回显通道信息。 |
sendetrn |
发送 ETRN 命令。 |
nosendetrn |
不发送 ETRN 命令。 |
VRFY 关键字 |
指定通道处理 VRFY 命令的方式 |
domainvrfy |
使用完整地址发出 VRFY 命令。 |
localvrfy |
使用本地地址发出 VRFY 命令。 |
novrfy |
不发出 VRFY 命令。 |
vrfyallow |
向 VRFY 命令提供信息响应。 |
vrfydefault |
根据通道的 HIDE_VERIFY 选项设置向 VRFY 命令提供默认响应。 |
vrfyhide |
向 SMTP VRFY 命令提供模糊的响应。 |
EXPN 关键字 |
指定通道处理 EXPN 关键字的方式 |
expnallow |
允许 EXPN,即使已使用 DISABLE_EXPAND SMTP 通道选项在 SMTP 服务器级别禁用 EXPN。 |
expndisable |
无条件禁用 EXPN。 |
expndefault |
如果已将 SMTP 服务器设置为允许 EXPN,则允许 EXPN。(默认值) |
DNS 域验证 |
指定通道是否执行 DNS 域验证 |
mailfromdnsverify |
验证 MAIL FROM: 命令中使用的域存在于 DNS 中。 |
nomailfromdnsverify |
不验证 MAIL FROM: 命令中使用的域存在于 DNS 中。 |
字符集和八位数据 |
指定通道处理八位数据的方式(注意:尽管这些关键字通常用于 SMTP 通道中但是它们与所有类型的通道都具有潜在的相关性。) |
charset7 |
与 7 位文本邮件关联的默认字符集 |
charset8 |
与 8 位文本邮件关联的默认字符集 |
charsetesc |
与包含换码符的 7 位文本关联的默认字符集 |
eightbit |
通道支持八位字符。 |
eightnegotiate |
如果可能,通道应对使用八位传输进行协商。 |
eightstrict |
通道应拒绝包含非法的八位数据的邮件。 |
sevenbit |
通道不支持八位字符;必须对八位字符进行编码。 |
协议流 |
指定通道要使用的协议流的程度。 |
streaming |
控制与通道关联的协议中使用的协议流的程度。 |
关键字:smtp、nosmtp、smtp_crlf 、smtp_cr、smtp_crorlf、smtp_lf
smtp 和 nosmtp 关键字指定通道是否支持 SMTP 协议。smtp 关键字或其变量之一对所有 SMTP 通道都具有强制性。
关键字 smtp_crlf、smtp_cr、smtp_crorlf 和 smtp_lf 可用于在 SMTP 通道上指定 MTA 将接受为行终止符的字符序列。关键字 smtp_crlf 的意思是必须以回车 (CR) 加换行符 (LF) 序列终止行。关键字 smtp_lf 或 smtp 的意思是接受前面不带 CR 的 LF。最后,smtp_cr 的意思是接受后面不跟 LF 的 CR。上述选项只对外来内容的处理有影响。
由于 SMTP 标准要求将 CRLF 作为行终止符,因此 MTA 始终生成标准的 CRLF 序列。各种 smtp 关键字只控制 MTA 是否接受其他非标准行终止符。例如,如果希望 MTA 只接受完全合法的 SMTP 邮件并拒绝所有带有非标准行终止符的邮件,则可以指定 stmp_crlf。
SMTP 协议已经被扩展 (RFC 1869) 为允许附加命令的协商。这是通过使用新的 EHLO 命令(替代 RFC 821 的 HELO 命令)来进行的。扩展的 SMTP 服务器通过提供其支持的扩展列表来响应 EHLO。未扩展的服务器返回未知命令错误,然后客户机发送旧的 HELO 命令。
这种应变策略通常与扩展的服务器和未扩展的服务器都能协同工作。但是不按照 RFC 821 实现 SMTP 的服务器却会出现问题。尤其是,某些不兼容的服务器在收到未知命令后会断开连接。
当任何服务器收到 EHLO 后断开连接时,SMTP 客户机实现尝试重新连接并使用 HELO 的策略。但是,如果远程服务器在收到 EHLO 后不仅断开连接而且进入问题状态,则该策略可能无法工作。
提供了通道关键字 ehlo、noehlo 和 checkehlo,用于处理此类情况。关键字 ehlo 通知 MTA 在所有初始连接尝试中使用 EHLO 命令。关键字 noehlo 禁用所有对 EHLO 命令的使用。关键字 checkehlo 测试远程 SMTP 服务器返回的响应标题中是否含有字符串 "ESMTP"。如果找到该字符串,则使用 EHLO;否则,使用 HELO。默认行为将在所有初始连接尝试中使用 EHLO,除非标题行含有字符串 "fire away",在这种情况下将使用 HELO;请注意,没有与此默认行为相对应的关键字,它介于 ehlo 和 checkehlo 关键字产生的行为之间。
关键字:allowetrn、blocketrn、disableetrn、domainetrn、silentetrn、sendetrn、 nosendetrn、novrfy
ETRN 命令(在 RFC 1985 中定义)对 SMTP 服务进行了扩展,使 SMTP 客户机和服务器可以交互操作,从而使服务器有机会启动对将进入给定主机的邮件队列的处理。
SMTP 客户机可以使用 ETRN 请求远程 SMTP 服务器启动对将发送到 SMTP 客户机的邮件队列的处理。这样,ETRN 提供了对进入自身系统的邮件实现远程 SMTP 系统“轮询”的方法。这对于彼此之间只有瞬态连接的系统(例如,设置为其他站点 [只能拨号连接到 Internet] 的辅助邮件交换 [MX] 主机的站点)可能会很有用。通过启用该命令,远程(可能是拨号)服务器可以请求对其邮件的传送。
SMTP 客户机在 SMTP ETRN 命令行中指定要向其发送邮件的系统的名称(通常为 SMTP 客户机系统自身的名称)。如果远程 SMTP 服务器支持 ETRN 命令,它将触发一个单独进程的执行过程,以重新连接到指定的系统,并为该系统发送所有正在等待传送的邮件。
当发送邮件的 SMTP 客户机发出 ETRN 命令,请求 MTA 尝试传送 MTA 队列中的邮件时,allowetrn、blocketrn、domainetrn 和 silentetrn 关键字将控制 MTA 的响应。
默认情况下,MTA 将尝试执行所有 ETRN 命令;也就是说,将启用 allowetrn 关键字。通过在通道定义中包含 blocketrn 关键字可以指定 MTA 不执行 ETRN 命令。
通过包含 silentetrn 关键字,可以指定 MTA 执行所有 ETRN 命令,但不回显域所匹配且 MTA 将尝试运行的通道的名称。domainetrn 关键字指定 MTA 仅执行指定了域的 ETRN 命令;另外它还使 MTA 不回显域所匹配且 MTA 将尝试运行的通道的名称。
disableetrn 完全禁用对 ETRN 命令的支持;SMTP 服务器不将 ETRN 公布为支持的命令。
sendetrn 和 nosendetrn 通道关键字控制 SMTP 连接开始时 MTA 是否发送 ETRN 命令。默认设置为 nosendetrn,表示 MTA 将不发送 ETRN 命令。如果远程 SMTP 服务器声称支持 ETRN,sendetrn 关键字将通知 MTA 发送 ETRN 命令。sendetrn 关键字后面应跟请求尝试传送其邮件的系统的名称。
关键字:domainvrfy、localvrfy、vrfyallow、vrfydefault、vrfyhide
VRFY 命令使 SMTP 客户机能够向 SMTP 服务器发送请求,请求验证特定用户名称的邮件是否位于服务器中。VRFY 命令是在 RFC 821 中定义的。
服务器将发送响应,表明用户是否本地用户、是否要转发邮件等。编号为 250 的响应表示用户名是本地的;编号为 251 的响应表示用户名不是本地的,但服务器可以转发邮件。服务器响应包含邮箱名称。
正常情况下,没有理由将 VRFY 命令作为 SMTP 对话的一部分发出。SMTP RCPT TO 命令应执行与 VRFY 相同的功能并返回相应的错误。但是,存在这样一些服务器,它们可以接受 RCPT TO 中的所有地址(以后退回),但是在 VRFY 命令中同样的服务器却执行更全面的检查。
默认情况下,MTA 不发送 VRFY 命令(启用 novrfy 关键字)。
如果需要,可以通过在通道定义中包含 domainvrfy 或 localvrfy 关键字将 MTA 配置为发出 SMTP VRFY 命令。使用关键字 domainvrfy 可以发出 VRFY 命令,并将完整地址 (user@host) 作为其参数。localvrfy 关键字使 MTA 发出仅带有地址中本地部分 (user) 的 VRFY 命令。
当发送邮件的 SMTP 客户机发出 SMTP VRFY 命令时,vrfyallow、vrfydefault 和 vrfyhide 关键字将控制 SMTP 服务器的响应。
vrfyallow 关键字通知 MTA 发出提供详细信息的响应。除非已经指定通道选项 HIDE_VERIFY=1,否则 vrfydefault 将通知 MTA 提供具有详细信息的响应。vrfyhide 关键字通知 MTA 只发出模糊的响应。上述关键字允许控制每个通道的 VRFY 响应,与 HIDE_VERIFY 选项相反,而后者通常适用于通过同一 SMTP 服务器处理的所有外来 TCP/IP 通道。
关键字:expnallow、expndisable、expndefault
即使已使用 DISABLE_EXPAND SMTP 通道选项在 SMTP 服务器级别禁用 EXPN,expnallow 也允许 EXPN。expndisable 无条件禁用 EXPN。如果 SMTP 服务器设置为允许 EXPN(默认设置),expndefault 将允许 EXPN。可以基于列表禁用扩展,但如果在服务器级别禁用扩展,基于列表的设置将是不相关的设置。
关键字:mailfromdnsverify、nomailfromdnsverify
在外来 TCP/IP 通道中设置 mailfromdnsverify 会导致 MTA 验证 DNS 中是否存在 SMTP MAIL FROM 命令中使用的域条目,如果不存在该条目,则拒绝邮件。默认设置 nomailfromdnsverify 的意思是不执行上述检查。请注意,对返回的地址域执行 DNS 检查将导致某些需要的有效邮件(例如,来自仅仅是未注册域名的合法站点的邮件,或 DNS 中有错误信息时)被拒绝;这违背了“RFC 1123:Internet 主机要求”中表达的大量接收信息以及尽量让 e-mail 通过的精神。但是某些站点可能需要执行上述检查,以防使用伪造的电子邮件地址从不存在的域发送主动提供的批量电子邮件 (UBE)。
因为 COM 和 ORG 顶层域中引入 DNS 通配符条目导致 mailfromdnsverify 作用减少,所以修改了 mailfromdnsverify 代码。DNS 返回一个或多个 A 记录时,系统会将这些值与新 MTA 选项 BLOCKED_MAIL_FROM_IPS 指定的域文字进行比较。如果找到匹配项,则该域被视为无效。为了恢复正常操作,当前的正确设置为:
BLOCKED_MAIL_FROM_IPS=[64.94.110.11]
此选项的默认值为空字符串。
关键字:charset7、charset8、charsetesc、sevenbit、eightbit、eightnegotiate、eightstrict
MIME 规范提供了一种机制,用以标记纯文本邮件中使用的字符集。特别是,可以将 charset= 参数指定为 Content-type: 标题行的一部分。MIME 中定义了各种字符集名称,包括 US-ASCII(默认)、ISO-8859-1、ISO-8859-2 以及随后定义的许多其他字符集。
某些现有系统和用户代理不提供生成上述字符集标记的机制;因此某些纯文本邮件可能未被正确标记。charset7、charset8 和 charsetesc 通道关键字提供了针对每个通道的机制,用以指定字符集名称,该名称将被插入到缺少字符集标记的邮件标题中。每个关键字都需要一个参数来指定字符集名称。系统不检查名称的有效性。但是请注意,只能对 MTA 表格目录的字符集定义文件 charsets.txt 中指定的字符集进行字符集转换。如果可能,请使用该文件中定义的名称。
如果邮件仅包含七位字符,则使用 charset7 字符集名称;如果在邮件中发现八位数据,则使用 charset8 字符集名称;如果邮件仅包含七位数据并同时包含转义符,则使用 charsetesc。如果未指定正确的关键字,字符集名称将不被插入到 Content-type: 标题行。
请注意,charset8 关键字还控制邮件标题中 8 位字符的 MIME 编码(标题中 8 位数据是绝对非法的)。如果未指定 charset8 值,MTA 通常对邮件标题中遇到的所有(非法)8 位数据进行 MIME 编码,将其标记为未知字符集。
这些字符集规范不会覆盖现有的标记,也就是说,如果邮件已经具有字符集标记或者不属于文本类型的邮件,则字符集规范没有任何影响。通常应当对 MTA 本地通道进行如下标记:
l ... charset7 US-ASCII charset8 ISO-8859-1 ... hostname |
如果邮件中没有 Content-type 标题,将添加该标题。如果缺少 MIME-version: 标题行,此关键字还将添加该标题行。
如果通道接收的未标记邮件使用了日语或韩语字符集并包含转义符,charsetesc 关键字将尤其有用。
某些传输限制使用带有大于 127(十进制)的序数值的字符。尤其需要注意的是,某些 SMTP 服务器会删除高位值,因而使用上述八位范围中的字符的邮件将出现乱码。
Messaging Server 提供了对这类邮件进行自动编码的功能,以便有问题的八位字符不直接出现在邮件中。通过指定 sevenbit 关键字,可以将该编码功能应用到所有加入给定通道队列的邮件。如果不存在此类限制,通道应标记为 eightbit。
SMTP 协议不允许使用 eightbit,“除非远程 SMTP 服务器明确声称支持允许 eightbit 的 SMTP 扩展”。某些传输(例如扩展的 SMTP)可能会实际支持某种形式的协商,以确定是否可以传输八位字符。因此,强烈建议使用 eightnegotiate 关键字,以便在协商失败时指示通道对邮件进行编码。这是所有通道的默认设置;不支持协商的通道将假定传输可以处理八位数据。
eightstrict 关键字通知 Messaging Server 拒绝所有标题包含非法八位数据的外来邮件。
关键字:streaming
某些邮件协议支持流操作。这意味着 MTA 可以同时发出多个操作,并等待每个操作的回复分批到达。streaming 关键字控制与通道关联的协议中使用的协议流的程度。此关键字要求一个整数参数;参数的解释方式取决于所使用的特定协议。
正常情况下,系统使用 SMTP 流水线作业扩展来协商可用的流支持的程度。因此,正常情况下不应该使用此关键字。
流操作可用值的范围是 0 到 3。0 不指定流操作,1 使 RCPT TO 命令组进行流操作,2 使 MAIL FROM/RCPT TO 进行流操作,3 使 HELO/MAIL FROM/RCPT TO 或 RSET/MAIL FROM/RCPT TO 进行流操作。默认值是 0。