Sun Java System Messaging Server 6.3 管理指南

第 17 章 休假自动邮件回复

对于自动生成的电子邮件回复(自动回复),尤其是休假邮件,MTA 使用邮件处理通知 (Message Disposition Notification, MDN) 和 Sieve 脚本语言。MDN 是由 MTA 发送给发件人和/或邮寄主管以报告有关邮件传送处理情况的电子邮件。MDN 也称为已读回执、确认、回执通知或发送收据。Sieve 是用于创建邮件过滤器的简单脚本撰写语言。与 Messaging Server 5.x 不同,Sieve 使用的字符集为 UTF-8,而不是 ISO-2022-JP。

本节介绍了休假自动回复机制。在大多数情况下,不必修改默认配置;但是,您希望配置系统以便在 MTA 中继计算机上而不是在后端消息存储上完成休假处理的情况除外。

本章包含以下几个部分:

17.1 休假自动回复概述

休假 Sieve 脚本可通过各种 LDAP 休假属性自动生成(请参见17.4 休假自动回复属性)。也可以明确指定这些脚本以获得更大的灵活性。跟踪休假的基本机制是一组文件(每个预期收件人一个),在将回复发送到各个发件人时,这些文件将保持跟踪。


注 –

休假邮件的字符集已更改为 UTF-8。


默认情况下,MTA 将在后端存储系统中计算休假。但是,由于性能原因,MTA 中继做的工作不如后端存储做的多,因此您可以在邮件中继计算机上而不是在后端存储上计算 MTA 休假。但是,使用此功能可能会导致发出休假响应的次数多于预期的次数,因为不同的中继处理不同的邮件。如果不希望发出休假邮件的次数多于预期的次数,您可以在中继之间共享文件的跟踪。如果也无法接受这种方法,您可以始终在后端存储系统中计算休假。

17.2 配置自动回复

可以通过一组模式生成传送地址。所用的模式取决于为 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 逻辑更有效。

表 17–1 在第一列中显示了用于自动回复规则的前缀字符,在第二列中显示了这些字符的定义。

表 17–1 用于 DELIVERY_OPTIONS 中的自动回复规则的前缀字符

前缀字符 

定义 

!

启用生成自动回复 Sieve 脚本。 

#

允许在中继上进行处理。 

^

仅在休假日期表明应该计算选项时才计算该选项。 

@

从各个邮件标题字段以及与信封 From: 地址关联的 LDAP 条目中提取首选语言信息。要该信息在适当的时候可用,进行自动回复时该信息必须经过 reprocess 通道。这通过将 @ 标记添加到 autoreply 传送选项实现。请注意,添加通道中继会增加邮件处理的系统开销。

自动回复规则本身指定了为位桶通道指定的地址。生成自动回复后,将考虑用此方法传送邮件,但是 MTA 方法需要一个传送地址。传送到位桶通道的任何内容都将被放弃。

17.2.1 在后端存储系统中配置自动回复

DELIVERY_OPTIONS 中的默认自动回复规则可在为用户提供服务的邮件服务器上生成自动回复。如果希望在后端存储系统中计算休假邮件,则不必进行任何配置。这是默认性能。

Procedure在中继上配置自动回复

如果希望在中继上而不是在后端存储系统中计算休假以提高性能,请编辑 option.dat 文件,并在 DELIVERY_OPTIONS 中将字符 # 放置在自动回复规则之前。

  1. 使用 an 编辑器打开 option.dat 文件。

  2. 添加或更改 DELIVERY_OPTIONS 选项,以使现有的自动回复规则类似于:

    #*^!autoreply=$M+$D@bitbucket

    默认的 DELIVERY_OPTIONS 选项类似于:

    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 形式装入这些文件。有关以 NFS 形式装入的重要信息,请参见12.8.2.3 将基于 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 生成休假文件的路径。此外,用于确定休假文件路径的地址现在存储在用户的邮件属性中,以前使用的是当前收件人地址。


17.3 休假自动回复操作的原理

在调用时,休假操作按如下方式进行:

  1. Sun Java System Messaging Server 进行检查以确保休假操作是由用户级别而不是系统级别 Sieve 脚本来执行。如果在系统级别的脚本中使用休假,将产生一个错误。

  2. 选中“无休假通知”内部 MTA 标志。如果设置了该标志,则处理将终止并且不会发送休假通知。

  3. 邮件的返回地址现在被选中。如果该地址为空白,则处理将终止并且不会发送休假通知。

  4. MTA 检查 :addresses 标记的参数中所指定的用户地址或任何其他地址是否显示在当前邮件的 To:Cc:Resent-to:Resent-cc: 头字段中。如果在任何标题字符字段中均未找到任何地址,则处理将终止并且不会发送休假通知。

  5. Messaging Server 将构造一个 :subject 变量和原因字符串的散列。将根据先前休假响应的每个用户的记录选取该字符串以及当前邮件的返回地址。如果已在 :days 变量允许的时间范围内发送了回复,则处理将终止并且将不会发送回复。

  6. 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 可以在公用文件系统中共享单组文件。

17.4 休假自动回复属性

休假操作使用的用户 LDAP 目录属性集为:

MAT 可以在多个 LDAP 属性和具有不同语言标记的属性值之间进行选择,并确定要使用的正确值。生效的语言标记和与信封 from 地址关联的首选语言信息进行比较。目前接收该处理的属性仅有 LDAP_AUTOREPLY_SUBJECT(通常为 mailAutoReplySubject )、LDAP_AUTOREPLY_TEXT(通常为 mailAutoReplyText )、LDAP_AUTOREPLY_TEXT_INT(通常为 mailAutoReplyTextInternal )、LDAP_SPARE_4LDAP_SPARE_5LDAP_PREFIX_TEXTLDAP_SUFFIX_TEXT

每个属性值应拥有不同的语言标记值。如果不同的值具有相同的标记值,则实际上将会随机选择这些值。

17.5 其他自动回复任务和问题

本部分介绍配置部分没有介绍的自动回复任务和问题。

17.5.1 收到从非 Sun 邮件服务器自动转发的电子邮件时发送自动回复邮件

MTA 收到从非 Sun 系统自动转发的邮件时可能发生自动回复问题。例如,如果客户在 sesta.com 有一个家庭账户,且客户将该账户设置为自动向其 siroe.com 上的工作账户转发邮件,同时,如果 siroe.com 使用 Messaging Server,且该用户将其账户设置为自动回复休假邮件,则 Messaging Server 在发出休假邮件时将出现问题。

发生该问题是因为 sesta.com 邮件服务器将信封地址从 user@sesta.com 更改为 user@siroe.com,但它不更改标题,标题仍然是 user@sesta.com。当 MTA 收到邮件时,它只查看标题地址。它尝试将此地址与 LDAP 用户目录中的地址匹配。如果它找到用户已设置自动回复的匹配,则将发送休假邮件。由于没有 LDAP 地址与 user@sesta.com 匹配,因此没有发送任何休假邮件。该问题在于实际地址位于信封而不是标题中。

由于执行自动转发的远程系统已知的收件人地址对于本地系统的相应用户而言是未知的,因此需要一种方式使此类地址对于本地系统也是已知的,从而在必要时能够发送休假回复。

可通过 Sieve vacation 操作的 :addresses 参数达到此目的。它可接受对应于收件人的地址列表,以执行此检查。MTA 选项 LDAP_AUTOREPLY_ADDRESSES 定义的属性允许在用户 LDAP 条目中指定此类地址。

要在收到从非 Sun 邮件服务器自动转发的邮件后能够自动回复,用户或管理员应该将电子邮件地址从可能转发这些邮件的地址设置为 LDAP_AUTOREPLY_ADDRESSES 定义的属性。