传送状态通知或状态通知是由 MTA 发送给发件人和邮寄主管(可选)的电子邮件状态消息。Messaging Server 使您可以按照内容和语言自定义通知邮件。您还可以分别为每类传送状态(例如 FAILED、BOUNCED、TIMEDOUT 等)创建不同的邮件。另外,您还可以为源于特定通道的邮件创建通知邮件。
默认情况下,状态通知存储于 msg_svr_base/config/locale/C 目录中(由 msg_svr_base/config/imta_tailor 文件中的 IMTA_LANG 设置指定)。文件名如下所示:
return_bounced.txt、return_delivered.txt、return_header.opt、return_timedout.txt、return_deferred.txt、return_failed.txt、return_prefix.txt、return_delayed.txt、return_forwarded.txt 和 return_suffix.txt。
在 *.txt 文件的邮件文本中,每行都不能超过 78 个字符。请注意,您不应直接更改这些文件,因为升级 Messaging Server 的当前版本时会覆盖这些文件。如果要修改这些文件,并将它们用作唯一一组通知邮件模板文件 (return_*.txt),请将这些文件复制到一个新目录中,并在其中对它们进行编辑。然后,将 imta_tailor 文件中的 IMTA_LANG 选项设置为指向包含这些模板的新目录。如果希望有多组通知文件(例如,每种语言一组),则需要设置 NOTIFICATION_LANGUAGE 映射表。
单个通知邮件由三个文件构建而成:return_prefix.txt + return_ActionStatus.txt + return_suffix.txt
要自定义或本地化通知,应为每种语言环境和/或自定义创建一组完整的 return_*.txt 文件并将其存储在单独的目录中。例如,您可以将法语通知文件存储在一个目录中,将西班牙语通知文件存储在另一个目录中,并将特殊的未经许可的批量电子邮件通道的通知存储在第三个目录中。
本发行版中包含法语、德语和西班牙语的样例文件。您可以修改这些文件,使它们适合于特定的需要。
对于双字节语言,例如日语,请确保使用日语构造文本,然后就像查看 ASCII 一样查看该文本,以检查 % 字符。如果有意外的 % 字符,则使用 %% 替换它们。
下面介绍了状态通知邮件集的格式和结构。
return_prefix.txt 提供了适当的标题文本以及正文的介绍材料。以下是美国英语语言环境的默认设置:
Content-type: text/plain; charset=us-asci Content-language: EN-US This report relates to a message you sent with the following header fields: %H |
非美国 ASCII 状态通知邮件应相应更改 charset 参数和 Content-Language 标题值(例如,对于法语的本地化文件,值为 ISO-8859-1 和 fr)。%H 是表 10–9 中定义的标题替换序列。
return_<ActionStatus>.txt 包含特定于状态的文本。ActionStatus 指邮件的 MTA 状态类型。例如,return_failed.txt 的默认文本如下:
无法将您的邮件传递给下列收件人:%R
return_bounced.txt 的默认文本为:
您的邮件被退回。是邮件管理员将其强行退回的。
此邮件的收件人列表是:%R
return_suffix.txt 包含结束文本。默认情况下,此文件为空。
替换 |
定义 |
---|---|
%H |
扩展为邮件的标题。 |
%C |
扩展为已排队的邮件的单位1 的数量。 |
%L |
扩展为邮件在返回之前留在队列中的单位1 的数量。 |
%F |
扩展为邮件可在队列中停留的单位1 的数量。 |
%S [%s] |
扩展为字母 S 或 s(如果先前扩展的数值不等于一)。示例:根据邮件已排队的天数,"%C day%s" 可扩展为“1 天”或“2 天”。 |
%U [%u] |
扩展为正在使用的时间单位小时或天。示例:根据邮件已排队的天数或小时数以及 MTA 选项 RETURN_UNITS 的值,"%C %U%s" 可扩展为“2 天”或“1 小时”。如果您已设置 RETURN_UNITS=1(小时),并且您的站点正在使用本地化的状态通知邮件,则需要编辑除英语外所有语言的 return_delayed.txt 和 return_timedout.txt 并将“天”替换为“小时”。对于法语,将 jour(s) 替换为 heure(s)。对于德语,将 Tag(e) 替换为 Stunde(n)。对于西班牙语,将 día(s) 替换为 hora(s) |
%R |
扩展为邮件的收件人列表。 |
%% |
%(请注意,无论为何种字符集,都将针对替换序列逐字节地扫描文本。如果您正在使用双字节字符集,请检查意外出现的 % 符号。) |
1 单位由 MTA 选项文件中的 RETURN_UNITS 选项定义,可以为小时或天(默认值)。 |
可以本地化传送状态通知邮件,以便将邮件以不同的语言返回给不同用户。例如,可以将法语通知返回给首选使用法语的用户。
本地化或自定义状态通知邮件包括两个步骤:
创建一组本地化/自定义的 return_*.txt 邮件文件,并将每组文件存储在单独的目录中。构造和修改状态通知中说明了此操作
设置 NOTIFICATION_LANGUAGE 映射表。
NOTIFICATION_LANGUAGE 映射表(位于 msg_svr_base/config/mappings 中)根据原始邮件(导致系统发出通知的邮件)的属性(例如,语言、国家/地区、域或地址),指定要使用的一组本地化或自定义的通知邮件文件。
原始发件人的邮件将被解析以确定状态通知类型、源通道、首选语言、返回地址及第一收件人。根据该表的构造方式,将根据以上的一个或多个属性来选择一组通知文件。
NOTIFICATION_LANGUAGE 映射表的格式如下所示。由于印刷原因,该样例条目行经过了换行。实际条目应显示在一行中。
NOTIFICATION_LANGUAGE dsn-type-list|source-channel|preferred-language|return-address \ |first-recipient $Idirectory-spec |
dsn-type-list 是以逗号分隔的传送状态通知类型列表。如果指定了多种类型,则这些类型必须由逗号分隔,中间不能包含空格(空格将终止映射表条目的模式)。这些类型如下:
failed—通用的永久性错误消息(例如,无此用户)。使用 return_failed.txt 文件。
bounced—与手动“退回”结合使用的通知邮件。由邮寄主管完成。使用 return_bounced.txt 文件。
timedout—MTA 无法在允许的传送时间内传送邮件。邮件将被返回。使用 return_timedout.txt 文件。
delayed—MTA 一直无法传送邮件,但将继续尝试传送。使用 return_delayed.txt 文件。
deferred—与 "delayed" 类似的未传送通知,但没有指示 MTA 将继续尝试传送的时间。使用 return_deferred.txt 文件。
forwarded—为此邮件请求了传送回执,但是该邮件现已被转发给不支持此类回执的系统。使用 return_forwarded.txt 文件。
source-channel 是生成通知邮件的通道,即邮件当前排队的通道。例如,ims-ms 对应于邮件存储的传送队列,tcp_local 对应于出站 SMTP 队列,等等。
preferred-language 是正在处理的邮件(为其生成通知的邮件)中所使用的语言。此信息的源最初是 accept_language 字段。如果该字段不存在,则使用 Preferred-language: 标题字段和 X-Accept-Language: 标题字段。有关标准语言代码值的列表,请参阅文件 msg_svr_base/config/languages.txt。
如果此字段不为空,则它将成为对 Preferred-language: 或 X-Accept-language: 标题行指定的邮件创始者。因此,您可以在此字段中找到无意义的字符。
return-address 是原始邮件的信封的 From: 地址。它是要向其发送通知邮件的信封地址,因此也是要使用的语言的指示符。
first-recipient 是原始邮件发往的信封的 To: 地址(如果邮件无法到达多个收件人处则为第一个地址)。例如,在通知“无法将您的邮件传送至 dan@siroe.com 中”的情况下,dan@siroe.com 即为报告的信封 To: 地址。
directory-spec 是是包含要使用的 return_*.txt 文件的目录(如果映射表探测匹配)。请注意,$I 必须位于目录规范之前。
例如,在 /lc_messages/table/notify_french/ 目录中存储法语通知文件 (return_*.txt) 以及在 /lc_messages/table/notify_spanish/ 目录下的 return_*.txt 文件中存储西班牙语通知文件的站点可能使用如下所示的表。注意,每个条目的开始处都必须有一个或多个空格,并且条目之间可以不含空行。
NOTIFICATION_LANGUAGE ! Preferred-language: header value specified ! *|*|fr|*|* $I/lc_messages/table/notify_french/ *|*|es|*|* $IIMTA_TABLE/notify_spanish/ *|*|en|*|* $I/imta/lang/ ! ! If no Preferred-language value, then select notification based on the ! country code in the domain name. EX: PF=French Polynesia; BO=Bolivia ! *|*|*|*.fr|* $I/imta/table/notify_french/ *|*|*|*.fx|* $I/imta/table/notify_french/ *|*|*|*.pf|* $I/imta/table/notify_french/ *|*|*|*.tf|* $I/imta/table/notify_french/ *|*|*|*.ar|* $I/imta/table/notify_spanish/ *|*|*|*.bo|* $I/imta/table/notify_spanish/ *|*|*|*.cl|* $I/imta/table/notify_spanish/ *|*|*|*.co|* $I/imta/table/notify_spanish/ *|*|*|*.cr|* $I/imta/table/notify_spanish/ *|*|*|*.cu|* $I/imta/table/notify_spanish/ *|*|*|*.ec|* $I/imta/table/notify_spanish/ *|*|*|*.es|* $I/imta/table/notify_spanish/ *|*|*|*.gp|* $I/imta/table/notify_spanish/ *|*|*|*.gt|* $I/imta/table/notify_spanish/ *|*|*|*.gy|* $I/imta/table/notify_spanish/ *|*|*|*.mx|* $I/imta/table/notify_spanish/ *|*|*|*.ni|* $I/imta/table/notify_spanish/ *|*|*|*.pa|* $I/imta/table/notify_spanish/ *|*|*|*.ve|* $I/imta/table/notify_spanish/ |
安装时将提供默认的 mappings.locale 文件,并将其包含在启用通知语言映射的 mappings 文件中。要禁用通知语言映射,请注释以下包含行:
! <IMTA_TABLE:mappings.locale
(请阅读该文件中的注释并根据您的需要进行修改。)
有两个选项文件既可用于传送状态也可用于邮件处理通知。这些文件旨在使生成的通知的国际化过程更加灵活。这些文件如下所示:
IMTA_LANG:return_option.dat (DSN)IMTA_LANG:disposition_option.dat (MDN) |
表 10–10 介绍了可用于这些文件的选项。
表 10–10 传送状态和邮件处理通知选项
选项 |
说明 |
---|---|
DAY (DSN) |
设置 RETURN_UNITS=0(默认值)时,用于替换 %U 或 %u 的插入文本。请注意,%U 和 %u 没有区别(这与分别替换英文 "Day" 或 "day" 的默认情况不同)。 |
覆盖用于构造 DSN 第一部分中每个收件人部分的 "Diagnostic code:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。 |
|
HOUR (DSN) |
设置 RETURN_UNITS=1 时,用于替换 %U 或 %u 的插入文本。请注意,%U 和 %u 没有区别(这与分别替换英文 "Hour" 或 "hour" 的默认情况不同)。 |
n.n.n (DSN) |
构建 DSN 的各收件人部分时,将检查是否存在名称与各收件人的数值状态相匹配的选项。如果匹配,将在 DSN 中插入相应的文本。此外,如果上面指定的 REASON 选项生成零长度的结果,则不会插入 REASON 字段。 |
覆盖 DSN DSN 第一部分各收件人部分的构建中使用的 "Recipient address:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。 |
|
REASON (DSN) |
覆盖用于构建 DSN 第一部分中每个收件人部分的 "Reason:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。 |
覆盖 DSN DSN 第一部分各收件人部分的构建中使用的 "Recipient address:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。 |
|
替换个人姓名字段,以与 From: 字段结合使用字段。此字段应采用 RFC 2047 编码。如果未指定此选项,则使用由 RETURN_PERSONAL MTA 选项设置的值。 |
|
SUBJECT(DSN 和 MDN) |
替换 Subject: 字段。该值仅在通知未提供其自身的主题字段时使用。此字段应采用 RFC 2047 编码。如果未使用此选项并且通知也未提供主题,则构建一个适当的主题。 |
MDN 第一部分和主题应转换为的字符集文本。默认情况下,不执行任何转换。 |
前几个小节介绍了设置状态通知邮件的基本过程。以下小节将介绍附加功能。
通常情况下,当邮件被退回或阻塞时,邮件的内容会返回发件人和通知邮件中的本地域邮寄主管。 如果完整地返回大量较大的邮件,则可能使资源负载过重。要阻塞超过一定大小的邮件返回内容,请设置 MTA 选项文件中的 CONTENT_RETURN_BLOCK_LIMIT 选项。
Internet 邮件标题的原始格式不允许包含非美国 ASCII 字符。如果在邮件标题中使用非美国 ASCII 字符,则会使用 RFC 2047 中说明的“MIME 标题编码”对这些字符进行编码。因此,电子邮件中的中文“主题”行将实际显示为:
Subject: =?big5?Q?=A4j=AB=AC=A8=B1=AD=B1=B0=D3=F5=A5X=AF=B2?=
电子邮件客户机负责在显示这些标题时删除编码。
因为 %H 模板将标题复制到通知邮件的正文中,所以已编码的标题文本会正常显示。但是,如果主题中的字符集(这种情况下为 "big5")与 return_prefix.txt 中 Content-Type 标题字符集参数中的字符集匹配,则 Messaging Server 将删除编码。如果不匹配,Messaging Server 将保留编码,不作更改。
关键字:notices、nonurgentnotices、normalnotices、urgentnotices
无法传送的邮件将在给定的通道队列中保存一段指定的时间,然后再返回发件人。此外,Messaging Server 尝试传送的同时,会将一系列状态/警告消息返回发件人。可以使用关键字 notices、nonurgentnotices、normalnotices 或 urgentnotices 指定邮件之间的时间和间隔。示例:
notices 1 2 3
对于所有邮件,将在 1 到 2 天之后发送瞬态失败状态通知邮件。如果 3 天之后邮件仍然没有传送,则会将邮件返回其创始者。
urgentnotices 2,4,6,8
对于优先级为紧急的邮件,将在 2、4 和 6 天之后发送瞬态失败通知。如果 8 天之后邮件仍然没有传送,则会将邮件返回其创始者。
请注意,MTA 选项文件中的 RETURN_UNITS 选项使您可以用小时 (1) 或天 (0) 指定单位。默认设置为天 (0)。如果设置了 RETURN_UNITS=1,则需要安排返回作业每小时运行一次,并且每小时获取一次通知。当返回作业每小时运行一次时,它还将每小时翻滚 mail.log* 文件一次。要防止每小时都翻滚 mail.log 文件,可以将 imta.tailor 文件中的 IMTA_RETURN_SPLIT_PERIOD 调整文件选项设置为 24。返回作业时间安排由 local.schedule.return_job configutil 参数控制。
如果没有指定 notices 关键字,则默认使用本地通道 l 的 notices 设置。如果未对本地通道进行设置,则默认使用 notices 3, 6, 9, 12。
关键字:includefinal、suppressfinal、useintermediate
MTA 生成通知邮件(退回邮件、传送回执邮件等)时,可能同时存在可用于 MTA 的“原始”格式的收件人地址和已变更的“最终”格式的该收件人的地址。MTA 始终会将原始格式(假如存在)包含在通知邮件中,因为这是通知邮件的收件人(通知邮件所关心的原始邮件的发件人)最可能识别的一种格式。
includefinal 和 suppressfinal 通道关键字控制 MTA 是否还包含最终格式的地址。对于要对外界“隐藏”内部邮箱名称的站点,抑制包含最终格式的地址可能会符合其利益。此类站点可能只愿意在状态通知邮件中包含原始的“外部”格式的地址。includefinal 是默认设置,包含最终格式的收件人地址。如果状态通知邮件中存在原始地址格式,则 suppressfinal 会使 MTA 抑制最终的地址格式。
useintermediate 关键字使用中间地址格式,亦即在列表扩展之后、用户邮箱名称生成之前生成的地址格式。如果此格式不存在,则使用最终格式。
默认情况下,除非返回了错误,并使用空的 Errors-to: 标题行或空的信封 From: 地址完全抑制了警告,否则将向邮寄主管发送失败和警告状态通知邮件的副本。可以通过以下部分和表 10–11 中介绍的众多通道关键字,来控制进一步精确地向邮寄主管传送通知邮件。
关键字:sendpost、nosendpost、copysendpost、errsendpost
通道程序可能会因长时间服务故障或地址无效而无法传送邮件。发生这种情况时,MTA 通道程序会将邮件返回给发件人,并附带有邮件未传送的原因的说明。可以选择将所有失败邮件的副本发送给本地邮寄主管。这对监视邮件故障十分有用,但是可能会导致邮寄主管必须处理过多的通信量。(请参见表 10–11。)
关键字:warnpost、nowarnpost、copywarnpost、errwarnpost
除了返回邮件,MTA 还可以发送未传送邮件的详细警告。这种现象通常是由于 notices 通道关键字设置引起的超时所致,尽管在某些情况下,通道程序可能在传送尝试失败后生成警告消息。警告消息包含故障和传送尝试持续时间的说明。大多数情况下,警告消息还包含有问题的邮件的标题和前几行。
可选地,所有警告邮件的副本可以发送给本地邮寄主管。在某种程度上,这对监视各个队列的状态十分有用,尽管它确实会产生大量要由邮寄主管处理的通信量。关键字 warnpost、copywarnpost、errwarnpost 和 nowarnpost 用于控制向邮寄主管发送警告消息。(请参见表 10–11。)
returnenvelope 关键字使用单个整数值,这些整数值可解释为一组位标志。位 0(值 = 1)控制由 MTA 生成的返回通知书写的是空的信封地址还是本地邮寄主管的地址。设置该位将强制使用本地邮寄主管地址,清除该位将强制使用空的地址。
RFC 1123 强制使用空的地址。但是,某些系统不能正确处理信封 From: 地址,但可能又需要使用此选项。
位 1(值 = 2)控制 MTA 是否将所有空的信封地址都替换为本地邮寄主管的地址。此选项用于适应不符合 RFC 821、RFC 822 或 RFC 1123 的非兼容系统。
位 2(值 = 4)禁止句法上无效的返回地址。
位 3(值 = 8)与 mailfromdnsverify 关键字相同。
通道程序或定期邮件返回作业将邮件返回给邮寄主管和原始发件人时,邮寄主管副本可以是整个邮件也可以只是标题。将邮寄主管副本限制为标题,可以进一步增加用户邮件的保密级别。但是,此操作本身并不能保证邮件的安全性;如果愿意,邮寄主管和系统管理员通常可以使用 root 系统权限阅读邮件内容。(请参见表 10–11。)
关键字:aliaspostmaster、returnaddress、noreturnaddress、returnpersonal、noreturnpersonal
默认情况下,MTA 构建退回邮件或状态通知邮件时所使用的邮寄主管返回地址为 postmaster@local-host,其中 local-host 为正式的本地主机名(本地通道上的名称),邮寄主管的个人名称为 "MTA e-Mail Interconnect"。选择邮寄主管地址时应小心—非法的选择可能会导致快速的邮件循环并产生大量的错误消息。
可以使用 RETURN_ADDRESS 和 RETURN_PERSONAL 选项设置 MTA 系统的默认邮寄主管地址和个人名称。或者,如果需要控制每个通道,可以使用 returnaddress 和 returnpersonal 通道关键字。returnaddress 和 returnpersonal 分别使用必需参数,以指定邮寄主管地址和个人名称。默认设置为 noreturnaddress 和 noreturnpersonal,表示应使用默认值。默认值通过 RETURN_ADDRESS 和 RETURN_PERSONAL 选项或正常的默认值(如果未设置该选项)建立。
如果通道中含有 aliaspostmaster 关键字,则按正式通道名寄往用户名 postmaster(小写、大写或大小写混合)的所有邮件都将重定向到 postmaster@local-host,其中 local-host 是正式的本地主机名(本地通道上的名称)。注意,Internet 标准要求 DNS 中接收邮件的任何域均需具有用来接收邮件的有效邮寄主管帐户。因此,在需要集中邮寄主管的责任,而不是为单独的域设置单独的邮寄主管帐户时,该关键字是十分有用的。即,虽然 returnaddress 可以控制 MTA 从邮寄主管生成通知邮件时所使用的返回邮寄主管地址,但是 aliaspostmaster 将影响 MTA 对寄往邮寄主管的邮件的处理。
表 10–11 用于将通知邮件发送给邮寄主管和发件人的关键字