对于自动生成的电子邮件回复(自动回复),尤其是休假邮件,MTA 使用邮件处理通知 (Message Disposition Notifications, MDN) 和 Sieve 脚本语言。MDN 是由 MTA 发送给发件人和/或邮寄主管以报告有关邮件传送处理情况的电子邮件。MDN 也称为已读回执、确认、回执通知或发送收据。Sieve 是用于创建邮件过滤器的简单脚本撰写语言。与 Messaging Server 5.x 不同,Sieve 使用的字符集为 UTF-8,而不是 ISO-2022-JP。
本节介绍了休假自动回复机制。在大多数情况下,不必修改默认配置;但是,您希望配置系统以便在 MTA 中继计算机上而不是在后端邮件存储上完成休假处理的情况除外。
本章包含以下几个部分:
休假 Sieve 脚本可通过各种 LDAP 休假属性自动生成(请参见休假自动回复属性)。也可以明确指定这些脚本以获得更大的灵活性。跟踪休假的基本机制是一组文件(每个预期收件人一个),在将回复发送到各个发件人时,这些文件将保持跟踪。
休假邮件的字符集已更改为 UTF-8。
默认情况下,MTA 将在后端存储系统中计算休假。但是,由于性能原因,MTA 中继做的工作不如后端存储做的多,因此您可以在邮件中继计算机上而不是在后端存储上计算 MTA 休假。但是,使用此功能可能会导致发出休假响应的次数多于预期的次数,因为不同的中继处理不同的邮件。如果不希望发出休假邮件的次数多于预期的次数,您可以在中继之间共享文件的跟踪。如果也无法接受这种方法,您可以始终在后端存储系统中计算休假。
可以通过一组模式生成传送地址。所用的模式取决于为 mailDeliveryOption 属性定义的值。将为每个有效的 mailDeliveryOption 生成一个传送地址。这些模式由在 option.dat 文件中定义的 MTA 选项 DELIVERY_OPTIONS 来定义。option.dat 文件的 DELIVERY_OPTIONS 中的默认自动回复规则为:
*^!autoreply=$M+$D@bitbucket
MTA 在自动回复 DELIVERY_OPTION MTA 选项中标注了 "^"。这将导致 MTA 检查休假日期。如果当前日期在休假日期之内,则处理将继续进行,并且 MTA 将在自动回复 DELIVERY_OPTION 中标注 "!"。然后,MTA 将基于用户条目中的各个自动回复 LDAP 属性创建休假 Sieve 脚本。自动回复规则可以包含前缀字符 "!"、","、"#"、"^" 和 "*"。
邮箱传送选项中可以有 "!" 标志。这将无条件地启用休假脚本的生成。但是,这样可以通过单独的传送选项启用自动回复机制,以便可由 "^" 标志进一步限制。检查此阶段的日期比使用 Sieve 逻辑更有效。
表 16–1 在第一列中显示了用于自动回复规则的前缀字符,在第二列中显示了这些字符的定义。
表 16–1 用于 DELIVERY_OPTIONS 中的自动回复规则的前缀字符
前缀字符 |
定义 |
---|---|
! |
启用生成自动回复 Sieve 脚本。 |
# |
允许在中继上进行处理。 |
^ |
仅在休假日期表明应该计算选项时才计算该选项。 |
* |
规则仅适用于用户。 |
自动回复规则本身指定了为位桶通道指定的地址。生成自动回复后,将考虑用此方法传送邮件,但是 MTA 方法需要一个传送地址。传送到位桶通道的任何内容都将被放弃。
DELIVERY_OPTIONS 中的默认自动回复规则可在为用户提供服务的邮件服务器上生成自动回复。如果希望在后端存储系统中计算休假邮件,则不必进行任何配置。这是默认性能。
如果希望在中继上而不是在后端存储系统中计算休假以提高性能,请编辑 option.dat 文件,并在 DELIVERY_OPTIONS 中将字符 # 放置在自动回复规则之前。
使用 an 编辑器打开 option.dat 文件。
添加或更改 DELIVERY_OPTIONS 选项,以使现有的自动回复规则类似于:
#*^!autoreply=$M+$D@bitbucket
DELIVERY_OPTIONS=*mailbox=$M%$\$2I$_+$2S@ims-ms-daemon, \ &members=*, \ *native=$M@native-daemon, \ /hold=@hold-daemon:$A, \ *unix=$M@native-daemon, \ &file=+$F@native-daemon, \ &@members_offline=* \ ,program=$M%$P@pipe-daemon, \ #forward=**, \ *^!autoreply=$M+$D@bitbucket
这将允许在中继上进行处理。如果 MTA 在中继上执行自动回复,则每个中继都可以独立跟踪特定通信人最近是否发送了一封离开邮件,或者此信息可以在中继之间共享。前一种情况简单一些,特别是在发出太多次离开邮件但无关紧要的时候。如果希望严格执行离开邮件的频率规则,则必须在中继之间共享信息。要在中继之间共享信息,应当以 NFS 形式装入这些文件
这些文件的位置由选项 VACATION_TEMPLATE 控制。应该将该选项(在 option.dat 中)设置为 /<path>/%A,其中 <path> 是在各种中继计算机之间共享的目录的路径。模板必须为 file:URL,并且需使用 $U 替换用户的名称。默认设置为:
VACATION_TEMPLATE=file:///opt/SUNWmsgsr/data/vacation/$3I/$1U/$2U/$U.vac
有关元字符的说明,请参见表 9–6。
现在休假文件模板具有对 UID 的访问权限,并允许基于用户的 UID 生成休假文件的路径。此外,用于确定休假文件路径的地址现在存储在用户的邮件属性中,以前使用的是当前收件人地址。
在调用时,休假操作按如下方式进行:
Sun Java System Messaging Server 进行检查以确保休假操作是由用户级别而不是系统级别 Sieve 脚本来执行。如果在系统级别的脚本中使用休假,将产生一个错误。
选中“无休假通知”内部 MTA 标志。如果设置了该标志,则处理将终止并且不会发送休假通知。
邮件的返回地址现在被选中。如果该地址为空白,则处理将终止并且不会发送休假通知。
MTA 进行检查以查看在 :addresses 标记的变量中指定的用户地址或任何其他地址是否显示在当前邮件的 To:、Cc:、Resent-to: 或 Resent-cc: 标题字段中。如果在任何标题字符字段中均未找到任何地址,则处理将终止并且不会发送休假通知。
Messaging Server 将构造一个 :subject 变量和原因字符串的散列。将根据先前休假响应的每个用户的记录选取该字符串以及当前邮件的返回地址。如果已在 :days 变量允许的时间范围内发送了回复,则处理将终止并且将不会发送回复。
Messaging Server 将通过 :subject 变量、原因字符串和 :mime 变量构造一个休假通知。此响应邮件的两种基本形式可能为:
在 RFC 2298 中指定的形式的邮件处理通知,其中第一部分包含原因文本。
单个部分文本回复。(此形式只用于支持“回复”自动回复模式属性设置。)
请注意,通过 Messenger Express 配置休假邮件时,系统会将 mailautoreplymode 自动设置为 reply。
默认情况下,系统将清除“无休假通知”MTA 标志。可以通过使用非标准 novacation 操作由系统级别 Sieve 脚本设置该标志。novacation Sieve 操作只允许在系统级别 Sieve 脚本中使用 。如果在用户级别的脚本中使用该操作,将生成错误。您可以使用此操作实现站点范围内对休假回复的限制(例如阻止对包含子字符串 "MAILER-DAEMON" 的地址的回复)。
每个用户每次响应的信息被存储在一组平面文本文件中,每个本地用户一个。这些文件的位置和命名方案由 VACATION_TEMPLATE MTA 选项的设置指定。该选项应设置为 file: URL。
这些文件的维护是自动进行的,并由 VACATION_CLEANUP 整数 MTA 选项设置控制。每次打开其中一个文件时,将以该值为模计算当前时间的值(以秒为单位)。如果结果为零,将扫描该文件并删除所有过期的条目。该选项的默认值为 200,这意味着在 200 次中有 1 次机会将执行清除操作。
用来读写这些平面文本文件的方法是以这样的方式设计的,即,它应该可以在 NFS 中正常操作。这使多个 MTA 可以在公用文件系统中共享单组文件。
休假操作使用的用户 LDAP 目录属性集为:
别名处理将跟踪此属性中指定的个人姓名信息,并将使用此信息来构建任何 MDN 或已生成的休假回复的 From: 字段。请小心使用,以免暴露个人信息。
休假开始日期和时间。该值的格式为 YYYYMMDDHHMMSSZ。该值被标准化为 GMT。如果当前时间在此属性所指定的时间之后,则应仅生成自动回复。如果缺少该属性,则不会强制指定开始日期。通过将 LDAP_START_DATE MTA 选项设置为另一个属性的名称,可以指示 MTA 查看此信息的另一个属性。
该属性将由生成 Sieve 脚本的代码进行读取和检查。如果当前日期在休假开始日期之前,休假处理将被中止。由于目前 Sieve 缺少日期/时间测试和比较功能,因此该属性无法通过脚本自身进行处理。
休假结束日期和时间。该值的格式为 YYYYMMDDHHMMSSZ。该值被标准化为 GMT。如果当前时间在此属性所指定的时间之前,则应仅生成自动回复。如果缺少该属性,则不会强制指定结束日期。通过将 LDAP_END_DATE MTA 选项设置为另一个属性的名称,可以指示 MTA 查看此信息的另一个属性。
该属性将由生成 Sieve 脚本的代码进行读取和检查。如果当前日期在休假结束日期之后,休假处理将被中止。由于目前 Sieve 缺少日期/时间测试和比较功能,因此该属性无法在脚本自身中进行处理。
指定用户邮件帐户的自动回复模式。该属性的有效值为:
echo—创建一个多部分文本,可回显原始邮件文本和添加的 mailAutoReplyText 或 mailAutoReplyTextInternal 文本。
reply—将 mailAutoReplyText 或 mailAutoReplyTextInternal 指定的单个部分的回复发送给原始发件人。
这些模式将作为假期操作的非标准 :echo 和 :reply 变量显示在 Sieve 脚本中。echo 将生成一个“已处理的”邮件处理通知 (MDN),该通知包含作为返回内容的原始邮件。reply 将生成一个仅包含回复文本的纯回复。非法值不会标明为休假操作的任何变量,这将生成一个仅包含原始邮件标题的 MDN。还请注意,选择回送的自动回复模式会导致将自动回复发送给每封邮件,无论上一个回复的发送日期多么近。
通过将 LDAP_AUTOREPLY_MODE MTA 选项设置为另一个属性的名称,可以指示 MTA 使用此信息的另一个属性。
mailAutoReplySubject
指定要在自动回复响应中使用的主题字段的内容。此内容必须为 UTF-8 字符串。该值作为休假操作的 :subject 变量来传送。通过将 LDAP_AUTOREPLY_SUBJECT MTA 选项设置为另一个属性的名称,可以指示 MTA 使用此信息的另一个属性。
请注意,由于 Sieve 当前缺少执行某些替换的功能,因此目前无法实现使用 $SUBJECT 将原始邮件插入到标题中。
发送给所有发件人(除了收件人域中的用户)的自动回复文本。如果未指定文本,外部用户将不会收到休假邮件。通过将 LDAP_AUTOREPLY_TEXT MTA 设置为另一个属性的名称,可以指示 MTA 使用此信息的另一个属性。
发送给收件人域中的发件人的自动回复文本。如果未指定文本,则内部用户将获得邮件自动回复文本邮件。通过将 LDAP_AUTOREPLY_TEXT_INT MTA 选项设置为另一个属性的名称,可以指示 MTA 使用此信息的另一个属性。
MTA 会将 mailAutoReplyText 或 mailAutoReplyTextInternal 属性值作为原因字符串传送给休假操作。
对任何给定邮件发件人的连续自动回复响应的有效期(以小时为单位)。仅当 mailAutoReplyMode=reply 时使用。如果值为 0,则每次收到邮件时将发回一封回复。该值将被转换为休假操作的非标准 :hours 变量。(通常,Sieve 休假操作仅支持用于此目的的 :days 变量,并且不允许值为 0。)
如果用户条目中未显示该属性,系统将从 AUTOREPLY_TIMEOUT_DEFAULT MTA 选项获取一个默认超时值。通过设置 LDAP_AUTOREPLY_TIMEOUT MTA 选项,可以指示 MTA 使用此信息的另一个属性。