Sun Java System Messaging Server 6 2005Q4 管理指南

控制传送状态通知邮件

传送状态通知或状态通知是由 MTA 发送给发件人和邮寄主管(可选)的电子邮件状态消息。Messaging Server 使您可以按照内容和语言自定义通知邮件。您还可以分别为每类传送状态(例如 FAILEDBOUNCEDTIMEDOUT 等)创建不同的邮件。另外,您还可以为源于特定通道的邮件创建通知邮件。

默认情况下,状态通知存储于 msg_svr_base/config/locale/C 目录中(由 msg_svr_base/config/imta_tailor 文件中的 IMTA_LANG 设置指定)。文件名如下所示:

return_bounced.txtreturn_delivered.txtreturn_header.optreturn_timedout.txtreturn_deferred.txtreturn_failed.txtreturn_prefix.txtreturn_delayed.txtreturn_forwarded.txtreturn_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 一样查看该文本,以检查 % 字符。如果有意外的 % 字符,则使用 %% 替换它们。


下面介绍了状态通知邮件集的格式和结构。

  1. 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-1fr)。%H 是表 10–9 中定义的标题替换序列。

  2. return_<ActionStatus>.txt 包含特定于状态的文本。ActionStatus 指邮件的 MTA 状态类型。例如,return_failed.txt 的默认文本如下:

    无法将您的邮件传递给下列收件人:%R

    return_bounced.txt 的默认文本为:

    您的邮件被退回。是邮件管理员将其强行退回的。

    此邮件的收件人列表是:%R

  3. return_suffix.txt 包含结束文本。默认情况下,此文件为空。

表 10–9 通知邮件替换序列

替换 

定义 

%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.txtreturn_timedout.txt 并将“天”替换为“小时”。对于法语,将 jour(s) 替换为 heure(s)。对于德语,将 Tag(e) 替换为 Stunde(n)。对于西班牙语,将 día(s) 替换为 hora(s)

%R 

扩展为邮件的收件人列表。 

%% 

%(请注意,无论为何种字符集,都将针对替换序列逐字节地扫描文本。如果您正在使用双字节字符集,请检查意外出现的 % 符号。) 

1 单位由 MTA 选项文件中的 RETURN_UNITS 选项定义,可以为小时或天(默认值)。

自定义和本地化传送状态通知邮件

可以本地化传送状态通知邮件,以便将邮件以不同的语言返回给不同用户。例如,可以将法语通知返回给首选使用法语的用户。

本地化或自定义状态通知邮件包括两个步骤:

  1. 创建一组本地化/自定义的 return_*.txt 邮件文件,并将每组文件存储在单独的目录中。构造和修改状态通知中说明了此操作

  2. 设置 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

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" 的默认情况不同)。

DIAGNOSTIC_CODE (DSN)

覆盖用于构造 DSN 第一部分中每个收件人部分的 "Diagnostic code:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。

HOUR (DSN)

设置 RETURN_UNITS=1 时,用于替换 %U%u 的插入文本。请注意,%U%u 没有区别(这与分别替换英文 "Hour" 或 "hour" 的默认情况不同)。

n.n.n (DSN)

构建 DSN 的各收件人部分时,将检查是否存在名称与各收件人的数值状态相匹配的选项。如果匹配,将在 DSN 中插入相应的文本。此外,如果上面指定的 REASON 选项生成零长度的结果,则不会插入 REASON 字段。

ORIGINAL_ADDRESS (DSN)

覆盖 DSN DSN 第一部分各收件人部分的构建中使用的 "Recipient address:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。 

REASON (DSN)

覆盖用于构建 DSN 第一部分中每个收件人部分的 "Reason:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。

RECIPIENT_ADDRESS (DSN)

覆盖 DSN DSN 第一部分各收件人部分的构建中使用的 "Recipient address:" 文本。指定此字段所用的字符集应与 DSN 第一部分使用的字符集相同。 

RETURN_PERSONAL(DSN 和 MDN)

替换个人姓名字段,以与 From: 字段结合使用字段。此字段应采用 RFC 2047 编码。如果未指定此选项,则使用由 RETURN_PERSONAL MTA 选项设置的值。

SUBJECT(DSN 和 MDN)

替换 Subject: 字段。该值仅在通知未提供其自身的主题字段时使用。此字段应采用 RFC 2047 编码。如果未使用此选项并且通知也未提供主题,则构建一个适当的主题。 

TEXT_CHARSET (MDN)

MDN 第一部分和主题应转换为的字符集文本。默认情况下,不执行任何转换。 

附加的状态通知邮件功能

前几个小节介绍了设置状态通知邮件的基本过程。以下小节将介绍附加功能。

阻塞较大邮件的内容返回

通常情况下,当邮件被退回或阻塞时,邮件的内容会返回发件人和通知邮件中的本地域邮寄主管。 如果完整地返回大量较大的邮件,则可能使资源负载过重。要阻塞超过一定大小的邮件返回内容,请设置 MTA 选项文件中的 CONTENT_RETURN_BLOCK_LIMIT 选项。

从状态通知邮件包含的标题中删除非美国 ASCII 字符

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.txtContent-Type 标题字符集参数中的字符集匹配,则 Messaging Server 将删除编码。如果不匹配,Messaging Server 将保留编码,不作更改。

设置通知邮件传送间隔

关键字:noticesnonurgentnoticesnormalnoticesurgentnotices

无法传送的邮件将在给定的通道队列中保存一段指定的时间,然后再返回发件人。此外,Messaging Server 尝试传送的同时,会将一系列状态/警告消息返回发件人。可以使用关键字 noticesnonurgentnoticesnormalnoticesurgentnotices 指定邮件之间的时间和间隔。示例:

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 关键字,则默认使用本地通道 lnotices 设置。如果未对本地通道进行设置,则默认使用 notices 3, 6, 9, 12

在状态通知邮件中包含已变更的地址

关键字:includefinalsuppressfinaluseintermediate

MTA 生成通知邮件(退回邮件、传送回执邮件等)时,可能同时存在可用于 MTA 的“原始”格式的收件人地址和已变更的“最终”格式的该收件人的地址。MTA 始终会将原始格式(假如存在)包含在通知邮件中,因为这是通知邮件的收件人(通知邮件所关心的原始邮件的发件人)最可能识别的一种格式。

includefinalsuppressfinal 通道关键字控制 MTA 是否还包含最终格式的地址。对于要对外界“隐藏”内部邮箱名称的站点,抑制包含最终格式的地址可能会符合其利益。此类站点可能只愿意在状态通知邮件中包含原始的“外部”格式的地址。includefinal 是默认设置,包含最终格式的收件人地址。如果状态通知邮件中存在原始地址格式,则 suppressfinal 会使 MTA 抑制最终的地址格式。

useintermediate 关键字使用中间地址格式,亦即在列表扩展之后、用户邮箱名称生成之前生成的地址格式。如果此格式不存在,则使用最终格式。

对邮寄主管发送、阻塞和指定状态通知邮件

默认情况下,除非返回了错误,并使用空的 Errors-to: 标题行或空的信封 From: 地址完全抑制了警告,否则将向邮寄主管发送失败和警告状态通知邮件的副本。可以通过以下部分和表 10–11 中介绍的众多通道关键字,来控制进一步精确地向邮寄主管传送通知邮件。

返回的失败邮件

关键字:sendpostnosendpostcopysendposterrsendpost

通道程序可能会因长时间服务故障或地址无效而无法传送邮件。发生这种情况时,MTA 通道程序会将邮件返回给发件人,并附带有邮件未传送的原因的说明。可以选择将所有失败邮件的副本发送给本地邮寄主管。这对监视邮件故障十分有用,但是可能会导致邮寄主管必须处理过多的通信量。(请参见表 10–11。)

警告消息

关键字:warnpostnowarnpostcopywarnposterrwarnpost

除了返回邮件,MTA 还可以发送未传送邮件的详细警告。这种现象通常是由于 notices 通道关键字设置引起的超时所致,尽管在某些情况下,通道程序可能在传送尝试失败后生成警告消息。警告消息包含故障和传送尝试持续时间的说明。大多数情况下,警告消息还包含有问题的邮件的标题和前几行。

可选地,所有警告邮件的副本可以发送给本地邮寄主管。在某种程度上,这对监视各个队列的状态十分有用,尽管它确实会产生大量要由邮寄主管处理的通信量。关键字 warnpostcopywarnposterrwarnpostnowarnpost 用于控制向邮寄主管发送警告消息。(请参见表 10–11。)

空的信封返回地址

关键字:returnenvelope

returnenvelope 关键字使用单个整数值,这些整数值可解释为一组位标志。位 0(值 = 1)控制由 MTA 生成的返回通知书写的是空的信封地址还是本地邮寄主管的地址。设置该位将强制使用本地邮寄主管地址,清除该位将强制使用空的地址。


注 –

RFC 1123 强制使用空的地址。但是,某些系统不能正确处理信封 From: 地址,但可能又需要使用此选项。


位 1(值 = 2)控制 MTA 是否将所有空的信封地址都替换为本地邮寄主管的地址。此选项用于适应不符合 RFC 821、RFC 822 或 RFC 1123 的非兼容系统。

位 2(值 = 4)禁止句法上无效的返回地址。

位 3(值 = 8)与 mailfromdnsverify 关键字相同。

邮寄主管返回的邮件内容

关键字:postheadonlypostheadbody

通道程序或定期邮件返回作业将邮件返回给邮寄主管和原始发件人时,邮寄主管副本可以是整个邮件也可以只是标题。将邮寄主管副本限制为标题,可以进一步增加用户邮件的保密级别。但是,此操作本身并不能保证邮件的安全性;如果愿意,邮寄主管和系统管理员通常可以使用 root 系统权限阅读邮件内容。(请参见表 10–11。)

设置每个通道邮寄主管的地址

关键字:aliaspostmasterreturnaddressnoreturnaddressreturnpersonalnoreturnpersonal

默认情况下,MTA 构建退回邮件或状态通知邮件时所使用的邮寄主管返回地址为 postmaster@local-host,其中 local-host 为正式的本地主机名(本地通道上的名称),邮寄主管的个人名称为 "MTA e-Mail Interconnect"。选择邮寄主管地址时应小心—非法的选择可能会导致快速的邮件循环并产生大量的错误消息。

可以使用 RETURN_ADDRESSRETURN_PERSONAL 选项设置 MTA 系统的默认邮寄主管地址和个人名称。或者,如果需要控制每个通道,可以使用 returnaddressreturnpersonal 通道关键字。returnaddressreturnpersonal 分别使用必需参数,以指定邮寄主管地址和个人名称。默认设置为 noreturnaddressnoreturnpersonal,表示应使用默认值。默认值通过 RETURN_ADDRESSRETURN_PERSONAL 选项或正常的默认值(如果未设置该选项)建立。

如果通道中含有 aliaspostmaster 关键字,则按正式通道名寄往用户名 postmaster(小写、大写或大小写混合)的所有邮件都将重定向到 postmaster@local-host,其中 local-host 是正式的本地主机名(本地通道上的名称)。注意,Internet 标准要求 DNS 中接收邮件的任何域均需具有用来接收邮件的有效邮寄主管帐户。因此,在需要集中邮寄主管的责任,而不是为单独的域设置单独的邮寄主管帐户时,该关键字是十分有用的。即,虽然 returnaddress 可以控制 MTA 从邮寄主管生成通知邮件时所使用的返回邮寄主管地址,但是 aliaspostmaster 将影响 MTA 对寄往邮寄主管的邮件的处理。

表 10–11 用于将通知邮件发送给邮寄主管和发件人的关键字

关键字 

说明 

返回的邮件内容

指定通知地址

notices

指定发送通知和返回邮件之前可能经历的时间。 

nonurgentnotices

指定为非紧急优先级的邮件发送通知和返回邮件之前可能经历的时间。 

normalnotices

指定为正常优先级的邮件发送通知和返回邮件之前可能经历的时间。 

urgentnotices

指定为紧急优先级的邮件发送通知和返回邮件之前可能经历的时间。 

返回的邮件

如何处理返回邮件的失败通知。

sendpost

启用向邮寄主管发送所有失败邮件的副本。 

copysendpost

向邮寄主管发送错误通知的副本(除非失败的邮件上的创始者地址为空),在这种情况下,邮寄主管将收到所有失败邮件的副本(除本身实际上为退回邮件或通知邮件的那些邮件)。 

errsendpost

仅在无法将通知返回创始者时向邮寄主管发送错误通知的副本。如果指定了 nosendpost,则永远不向邮寄主管发送失败的邮件。

nosendpost

禁用向邮寄主管发送所有失败邮件的副本。 

警告消息

如何处理警告消息。

warnpost

启用向邮寄主管发送警告消息的副本。默认设置是向邮寄主管发送警告的副本(除非使用空的 Warnings-to: 标题或空的信封 From: 地址。

copywarnpost

向邮寄主管发送警告消息的副本(除非未传送邮件上的创始者地址为空)。 

errwarnpost

在无法将通知返回创始者时向邮寄主管发送警告消息的副本。 

nowarnpost

禁用向邮寄主管发送警告消息的副本。 

返回的邮件内容

指定是向邮寄主管发送整个邮件还是只发送标题。

postheadonly

仅向邮寄主管返回标题。将邮寄主管副本限制为标题,可以进一步增加用户邮件的保密级别。但是,此操作并不能保证邮件的安全性,如果愿意,邮寄主管和系统管理员可以使用 root 系统权限阅读邮件内容。

postheadbody

同时返回邮件的标题和内容。 

返回的邮件内容

指定通知地址

includefinal

在传送通知中包含地址的最终格式(收件人地址)。 

returnenvelope

控制空的信封返回地址的使用。returnenvelope 关键字使用单个整数值,这些整数值可解释为一组位标志。

位 0(值 = 1)控制由 MTA 生成的返回通知书写的是空的信封地址还是本地邮寄主管的地址。设置该位将强制使用本地邮寄主管地址,清除该位将强制使用空的地址。 

位 1(值 = 2)控制 MTA 是否将所有空的信封地址都替换为本地邮寄主管的地址。此选项用于适应不符合 RFC 821、RFC 822 或 RFC 1123 的非兼容系统。

位 2(值 = 4)禁止句法上无效的返回地址。 

位 3(值 = 8)与 mailfromdnsverify 关键字相同。

suppressfinal

抑制通知邮件中的最终地址格式(如果通知邮件中存在原始地址格式)。 

useintermediate

使用在列表扩展之后,但在用户邮箱名称生成之前生成的地址的中间格式。如果此格式不存在,则使用最终格式。 

返回的邮件内容

指定通知地址

aliaspostmaster

将按正式的通道名称寄往 postmaster 用户名的邮件重定向至 postmaster@local-host,其中 local-host 是本地主机名(本地通道上的名称)。 

returnaddress

指定本地邮寄主管的返回地址。 

noreturnaddress

RETURN_ADDRESS 选项值用作邮寄主管地址名称。

returnpersonal

设置本地邮寄主管的个人名称。 

noreturnpersonal

RETURN_PERSONAL 选项值用作邮寄主管个人名称。