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

设置自动删除邮件(过期和清除)功能

自动删除邮件功能(也称为过期和清除)根据管理员定义的一组条件自动从邮件存储中删除邮件。此功能可用于自动删除旧的和过大的邮件、已读/已删除邮件、带有特定主题行的邮件等等。此功能允许使用以下删除条件:

此功能由 imexpire 实用程序执行,它将擦除和清除邮件。有关邮件删除过程的详细信息,请参见邮件存储如何删除邮件


注 –

服务器将不发出警告便删除邮件,因此通知用户有关自动删除邮件的策略很重要。意外的邮件删除会给用户和管理员带来恐慌。


imexpire 操作原理

可以从命令行调用 imexpire,或通过 imsched 守护进程安排其自动运行的时间。管理员在名为 store.expirerule 的文件中指定一组过期规则。该文件用来指定删除邮件的标准。可以有多个文件,其中属于同一规则范畴的文件将存储在同一目录中。即,普遍适用于整个邮件存储的规则、适用于某个分区的规则、适用于用户的规则等等将分别存放在不同的目录中。


注 –

虽然可以使用 Console 或 configutil 命令指定全局过期规则,但是使用 store.expirerule 是首选方法。如果使用 Console 或 configutil 创建的规则太多,可能会产生性能问题。


imexpire 在启动时装入所有过期规则。默认情况下,imexpire 为每个分区创建一个线程。每个线程都将在其指定的分区下查看用户文件夹列表,同时装入本地过期规则文件。过期功能将按照适用于该文件夹的过期规则检查每个文件夹,并根据需要擦除邮件。如果在邮箱目录下存在 store.exp 文件,并且邮件由于超出了 store.cleanupage 配置参数指定的时间而被擦除/过期,清除功能将在邮件散列目录下永久删除邮件文件,并从 store.exp 文件中永久删除 UID 记录。

也可以通过在 msg_svr_base/config/ 中名为 expire_exclude_list 的文件中添加指定用户的用户 ID(每行一个),从过期规则中排除这些用户。

部署自动删除邮件功能

自动删除邮件需要三个步骤:

  1. 定义自动删除邮件策略:哪些邮件将被自动删除?哪些用户、文件夹、域和分区将使邮件自动被删除?哪些大小、邮件生存期、标题将定义删除条件。定义要删除邮件的范围。请参见定义自动删除邮件策略

  2. 指定 imexpire 规则以实现此策略。请参见设置实现自动删除邮件策略的规则

  3. 指定 imexpire 时间安排。请参见安排自动删除邮件和日志记录级别

定义自动删除邮件策略

通过指定删除条件定义自动删除邮件策略。imexpire 允许使用以下条件进行删除:

邮件的生存期。自动删除存在的时间超过 X 天的邮件。属性:messagedays

邮件计数。自动删除文件夹中超出 X 封邮件的邮件。属性:messagecount

超大邮件的生存期。自动删除在 Y 天宽限期后超过 X 字节的邮件。属性:messagesizemessagesizedays

已读已删除邮件标志。自动删除带有已读已删除标志设置的邮件。可以将这些条件设置为 "and""or"。如果设置为 or,则邮件的已读/删除标志将导致自动删除而不管其他条件。如果设置为 and,则邮件的已读/删除标志必须设置为与指定的所有其他条件一起使用。属性:seendeleted

邮件的标题字段。允许您将标题和字符串指定为删除邮件的条件。例如,删除所有标题为 "Subject: Work from Home!" 的邮件

邮件的文件夹。允许您指定要从其中删除邮件的文件夹。属性:folderpattern


注 –

imexpire 不允许根据邮件被读取后已存在的时间删除或保留邮件。例如,不能指定删除已经有 200 天未被读取的邮件。


自动删除邮件策略的示例

示例 1:删除超过 1,000 封邮件的文件夹中所有存在时间达到 365 天的邮件。

示例 2:删除域 siroe.com 中 180 天以上的邮件。

示例 3:删除所有已标记为已删除的邮件。

示例 4:删除 sesta.com 中已标记为已读、30 天以上、大于 100 千字节、位于超过 1,000 封邮件的文件夹中、带有标题 X-spam 的邮件。

设置实现自动删除邮件策略的规则

要实现上一节中定义的自动删除邮件策略,必须设置 imexpire 规则。可以通过将规则放入 store.expirerule 文件来设置规则。以下所示为两个全局 store.expirerule 规则的示例:


Rule1.regexp: 1
Rule1.folderpattern: user/.*/trash
Rule1.messagedays: 2
Rule2:regexp: 1
Rule2.folderpattern: user/.*
Rule2.messagedays: 14

            

在此示例中,规则 1 指定垃圾文件夹中的所有邮件将在两天后被删除。规则 2 指定邮件存储中的所有邮件将在 14 天后被删除。

本节包含以下几个部分:

过期规则原则

本节介绍设置 store.expirerule 文件规则的原则。


注 –

在早期的 Messaging Server 发行版中,可以使用 configutil 参数 store.expirerule.attribute 来设置过期规则(请参见 《Sun Java System Messaging Server 6 2005Q4 Administration Reference》中的“configutil Parameters”)。现在仍然可以使用,但不支持使用标题约束的过期规则(例如:使用特定主题行作为邮件过期规则)。无论如何,使用 store.expirerule 指定所有过期规则是最佳选择。


表 18–8 imexpire 属性

属性 

说明(属性值) 

exclusive

指定规则是否为专用规则。如果指定为 exclusive,则只有此规则应用于指定的邮箱,而所有其他规则都将被忽略。如果存在多个专用规则,则将使用最后装入的专用规则。例如,如果指定了全局专用规则和本地专用规则,则将使用本地规则。如果有多个全局专用规则,则使用 configutil 列出的最后一个全局规则。(1/0)

folderpattern

指定此规则影响的文件夹。格式必须以 user/ 开始,表示目录 store_root/partition/*/。请参见图 18–4表 18–9。(POSIX 正则表达式)

messagecount

文件夹中邮件的最大数量。传送附加的邮件时,最早的邮件将被擦除。(整数) 

foldersize

传送附加的邮件时,擦除最早的邮件之前文件夹的最大大小。(以字节为单位的整数) 

messagedays

邮件被擦除前的生存期(以天为单位)。(整数) 

messagesize

在标记为将被擦除前,邮件的最大大小(以字节为单位)。(整数) 

messagesizedays

宽限期。超大邮件可以保留在文件夹中的天数。(整数) 

邮件标题字段

指定标题字段和标记要删除的邮件的字符串。值不区分大小写,正则表达式不会被识别。示例:Rule1.Subject: Get Rich Now!

对于标题过期过期日期,如果在这些标题字段中指定的日期值早于 messagedays 属性,则 imexpire 将删除邮件。如果指定了多个过期标题字段,将采用最早的过期日期。(字符串)。

regexp

在创建规则时启用 UNIX 正则表达式。(1 或 0)。如果未指定,则将使用 IMAP 表达式。 

seen

seen 是用户打开邮件时,系统设置的邮件状态标志。如果属性 seen 设置为 and,则邮件必须已被阅读并且在规则实施前必须满足其他条件。 如果属性 seen 设置为 or,则邮件仅需已被阅读或在规则实施前满足另一个条件。(and/or)。

deleted

deleted 是用户删除邮件时,系统设置的邮件状态标志。如果属性 deleted 设置为 and,则邮件必须被删除并且在规则实施前必须满足另一个条件。如果属性 deleted 设置为 or,则邮件仅需已被阅读在规则实施前满足另一个条件。(and/or)

通过文本方式设置 imexpire 规则

通过在 store.expirerule 文件中指定规则来设置自动删除邮件规则。store.expirerule 文件中每行包含一个过期条件。全局规则配置文件 (msg_svr_base/data/store/store.expirerule) 的过期条件的格式如下:

rule_name.attribute : value

用户或邮箱规则配置文件的过期规则的格式如下:

attribute: value

示例 18–1 显示了 msg_svr_base/config/store.expirerule 中的一组全局过期规则。

规则 1 设置全局过期策略(即应用于所有邮件的策略),如下所示:

规则 2 为托管域 siroe.com 中的用户设置自动删除邮件策略。它将邮箱大小限制为 1 兆字节,删除已删除的邮件,并删除 14 天前的邮件。

规则 3 为用户 f.dostoevskiinbox 文件夹中的邮件设置自动删除邮件策略。它将删除主题行带有表达式 "On-line Casino" 的邮件。


示例 18–1 imexpire 规则示例


Rule1.regexp: 1
Rule1.folderpattern: user/.*
Rule1.messagesize: 100000
Rule1.messagesizedays: 3
Rule1.deleted: or
Rule1.Subject: Vigara Now!
Rule1.Subject: XXX Porn!
Rule1.messagecount: 1000
Rule1.messagedays: 365
Rule2.regexp: 1
Rule2.folderpattern: user/.*@siroe.com/.*Rule2.exclusive: 1
Rule2.deleted: or
Rule2.messagedays: 14
Rule2.messagecount: 1000
Rule3.folderpattern: user/f.dostoevski/inboxRule3.Subject: *On-line Casino*
                  

设置 imexpire 文件夹模式

通过将 imexpire 属性 regex 设置为 1,可以使用 POSIX 正则表达式指定文件夹模式。如果未指定,则将使用 IMAP 表达式。格式必须以 user/ 开头,后跟一种模式。表 18–9 显示了各种文件夹的文件夹模式。)

表 18–9 使用正则表达式的 imexpire 文件夹模式

文件夹模式 

范围 

user/userid/.*

将规则应用于 userid 的所有文件夹中的所有邮件。

user/userid/Sent

将规则应用于 userid 在文件夹 Sent 中的邮件:

user/.*

将规则应用到整个邮件存储。 

user/.*/trash

将规则应用于所有用户的 trash 文件夹。

user/.*@siroe.com/.*

将规则应用到托管域 siroe.com 中的文件夹: 

user/[^@]*/.*

将规则应用到默认域中的文件夹。 

Procedure使用 Console 设置全局自动删除邮件规则

请注意,虽然可以使用 Console 设置全局过期规则,但是使用 store.expirerule 是首选方法。如果使用 Console 或 configutil 创建的规则太多,可能会产生性能问题。

步骤
  1. 如下所示调出自动删除邮件 GUI:

    “主控制台”>“服务器组”> "Messaging Server"(打开)>“Messaging Server 控制台”>“配置”选项卡 >“邮件存储”>“过期/清除”>“添加”

    图 18–4 显示了 GUI 的草图。

    图 18–4 自动删除邮件(过期/清除)GUI—草图

    图形中显示了自动删除邮件 GUI 所对应的图。

  2. 输入新规则的名称。

  3. 输入将从其中自动删除邮件的文件夹。

    请参见上述设置 imexpire 文件夹模式

  4. 如果此规则是与指定条件相匹配的文件夹的专用规则,则请选取“专用”框。

    如果已选取此框,则此规则将优先于与指定模式相匹配的所有其他规则。有关专用复选框的详细信息,请参见表 18–8

  5. 要创建基于文件夹大小的规则,请执行以下操作:

    • 选取“文件夹大小约束”复选框。在“邮件计数”字段中,指定在最早的邮件被删除之前文件夹中将保留的邮件的最大数目。在“文件夹大小”字段中,指定最早的邮件被删除之前最大的文件夹大小(以字节为单位)。

  6. 要创建基于邮件生存期的规则,请选取“邮件生存期约束”复选框:

    在“天数”字段中,指定邮件可以在文件夹中保存的时间(以天为单位)。

  7. 要创建基于邮件大小的规则,请执行以下操作:

    • 选取“邮件大小限制约束”复选框。在“邮件大小限制”字段中,输入文件夹中允许的邮件的最大大小。在“宽限期”字段中,输入超大邮件被删除前在文件夹中保存的时间。

  8. 要创建基于是否已设置“已读”或“已删除”标志的规则,请执行以下操作:

    • 选取“邮件标志约束”复选框。

    • 对于“已读:” 字段,选择“和”将指定邮件必须已被阅读并且在规则实施前必须满足另一个条件。选择“或”将指定邮件仅需已被阅读在规则实施前满足另一个条件。

    • 对于“已删除:” 字段,选择“和”将指定邮件必须被删除并且在规则实施前必须满足另一个条件。选择“或”将指定邮件仅需被删除在规则实施前满足另一个条件。

  9. 要创建基于标题字段及其值的规则,请执行以下操作:

    • 选取“标题约束”复选框。

    • 用以下格式输入以逗号分隔的标题和值的列表:

      header1: value1, header2 : value2

      示例:Subject: Work at Home!,From: virus@sesta.com

      对于标题过期过期日期,如果其日期值早于“邮件生存期约束”,则系统将删除该邮件。如果指定了多个过期标题字段,将采用最早的过期日期。(字符串)。

  10. 单击“确定”以将新规则添加到“自动删除邮件”列表中。

安排自动删除邮件和日志记录级别

通过 imsched 时间安排守护进程来激活自动删除邮件。默认情况下,imsched 将在每天 23:00 点调用 imexpire,邮件将被擦除并被清除。可以通过设置表 18–10 中介绍的 configutil 参数 local.schedule.expirelocal.schedule.purgestore.cleanupage 自定义此时间安排。

对于大型邮件存储,可能会花费很长时间才能完成过期和清除,因此您可能需要通过试验决定运行这些进程的频率。例如,如果过期/清除周期花费 10 小时,您可能不希望默认时间安排为每天运行过期和清除一次。使用 local.schedule.purge 安排过期和清除,可以为清除指定单独的时间安排。如果未设置 local.schedule.purge,则 imexpire 将在过期后执行清除。

表 18–10 过期和清除 configutil 日志和时间安排参数

参数 

说明 

local.schedule.expire

运行 imexpire 的时间间隔。使用 UNIX crontab 格式:minute hour day-of-month month-of-year day-of-week

这些值以空格或 Tab 分隔符分隔,可以分别为 0-59、0-23、1-31、1-12 或 0-6(其中 0 = 星期天)。每个时间字段都可以为以下内容之一:一个星号(表示所有合法值)、一个以逗号分隔的值的列表或一个以连字符分隔的两个值表示的范围。请注意,可以同时用几号和星期几指定时间,但是通常不同时使用这两者,因为这种情况很少发生。如果同时指定了这两者,则需要同时满足两者。例如,设置月份的第 17 日和星期二将要求同时满足两个值。 

时间间隔示例:

1) 在 12:30am、8:30am 和 4:30pm 运行 imexpire30 0,8,16 * * * /opt/SUNWmsgsr/lib/imexpire

2) 在工作日早晨 3:15am 运行 imexpire15 3 * * 1-5 /opt/SUNWmsgsr/lib/imexpire

3) 仅在星期一运行 imexpire0 0 * * 1 /opt/SUNWmsgsr/lib/imexpire

默认值:0 23 * * * /opt/SUNWmsgsr/lib/imexpire

local.schedule.purge

运行 purge 的时间间隔。使用 UNIX crontab 格式:minute hour day-of-month month-of-year day-of-week.

默认值:0 0,4,8,12,16,20 * * * /opt/SUNWmsgsr/lib/purge -num=5(每四小时。) 

store.cleanupage

purge 将永久删除邮件前已过期或已擦除的邮件的生存期(以小时为单位)。

默认值:无 

local.store.expire.loglevel

指定日志级别: 

1 = 记录整个过期会话的摘要。 

2 = 为每个过期的邮箱记录一条消息。 

3 = 为每个过期的邮件记录一条消息。 

默认值:1 

使用 Console 进行 imexpire 时间安排

如下所示调出自动删除邮件 GUI:

“主控制台”>“服务器组”> "Messaging Server"(打开)>“Messaging Server 控制台”>“配置”选项卡 >“邮件存储”>“过期/清除”

此 Console 页面在顶部列出过期规则,在底部列出过期和清除时间安排。要安排过期和清除的日程,请使用“过期/清理时间安排”中的下拉式菜单为过期和清除设置月份、月份日期、星期日期(其中 0 = 星期天)、小时和分钟。


注 –

可以按几号和星期几设置日期值。如果同时设置了两者,则需同时满足两者的条件。如果设置星期的第 3 天(星期三)和月份的第 17 天,则将仅在每月的第 17 天恰好为星期三时进行清除/过期。


设置 imexpire 日志记录级别

imexpire 将在完成时记录默认日志文件的摘要。如果从命令行调用过期命令,则 -v(详细)和 -d(调试)选项可以用于指示 imexpire 日志记录 stderr 的详细状态/调试消息。如果通过 imsched 调用 imexpire,则 configutil 参数 local.store.expire.loglevel 可以设置为 1、2 或 3 以进行不同级别的日志记录。Loglevel 1 是默认值,将记录整个过期会话的摘要。Loglevel 2 将对每个过期邮箱记录一条消息。Loglevel 3 将对每个过期邮件记录一条消息。

从自动删除邮件中排除指定的用户

通过在 msg_svr_base/config/ 中名为 expire_exclude_list 的文件中添加指定用户的用户 ID(每行一个),以从过期规则中排除这些用户。