自动删除邮件功能(也称为过期和清除)根据管理员定义的一组条件自动从邮件存储中删除邮件。此功能可用于自动删除旧的和过大的邮件、已读/已删除邮件、带有特定主题行的邮件等等。此功能允许使用以下删除条件:
按文件夹(邮箱)、用户、域、整个邮件存储或特定分区
邮件在邮箱中已经存在的时间(以天为单位)
邮件的大小和宽限期(在清除前超大邮件将在邮件存储中保留的天数)
邮件是否已标记为已读或已删除
标题字符串
此功能由 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(每行一个),从过期规则中排除这些用户。
自动删除邮件需要三个步骤:
定义自动删除邮件策略:哪些邮件将被自动删除?哪些用户、文件夹、域和分区将使邮件自动被删除?哪些大小、邮件生存期、标题将定义删除条件。定义要删除邮件的范围。请参见定义自动删除邮件策略
指定 imexpire 规则以实现此策略。请参见设置实现自动删除邮件策略的规则
指定 imexpire 时间安排。请参见安排自动删除邮件和日志记录级别
通过指定删除条件定义自动删除邮件策略。imexpire 允许使用以下条件进行删除:
邮件的生存期。自动删除存在的时间超过 X 天的邮件。属性:messagedays。
邮件计数。自动删除文件夹中超出 X 封邮件的邮件。属性:messagecount。
超大邮件的生存期。自动删除在 Y 天宽限期后超过 X 字节的邮件。属性:messagesize 和 messagesizedays。
已读和已删除邮件标志。自动删除带有已读或已删除标志设置的邮件。可以将这些条件设置为 "and" 或 "or"。如果设置为 or,则邮件的已读/删除标志将导致自动删除而不管其他条件。如果设置为 and,则邮件的已读/删除标志必须设置为与指定的所有其他条件一起使用。属性:seen 和 deleted。
邮件的标题字段。允许您将标题和字符串指定为删除邮件的条件。例如,删除所有标题为 "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 指定所有过期规则是最佳选择。
规则在名为 store.expirerule 的文件中指定。
可以使用相同的规则指定多个过期条件。(如上例所示。)
规则可以应用到整个邮件存储(全局规则)、分区、用户或文件夹。
全局规则存储于 msg_svr_base/config/store.expirerule 中
系统将针对每个邮箱检查每种全局规则,这可能会造成一定的系统处理开销(取决于指定的全局规则数)。因此,不应在全局规则文件中指定分区、邮箱或用户规则。总之,除了必要规则外,尽量少把其他过期规则放置到该文件中。
分区规则存储于 store_root/partition/partition_name/store.expirerule 中。
用户规则在 store_root/partition/partition_name/userid/store.expirerule 中指定,或通过将 folderpattern 规则指定为 user/userid/.* 来指定。
文件夹规则在 store_root/partition/partition_name/userid/folder/store.expirerule 中指定,或通过将 folderpattern 规则指定为 user/userid/folder 来指定。
请注意,只在 Messaging Server 6.2p4 发行版及更高版本中实现了使用 rule_name 的多个非全局规则(用户、文件夹、分区)。
多个过期规则可以同时应用于一个邮箱。邮箱的过期策略由全局规则和本地规则组成。本地规则适用于同一目录下的邮箱及其所有子文件夹。
imexpire 将统一应用于一个邮箱的所有过期规则,除非存在为此邮箱指定的专用规则(请参见表 18–8)。产生的规则集表示基于所有适用规则的最严格的过期策略。例如,如果规则 X 的过期策略指定最大邮件保存时间为 10 天,规则 Y 指定为 5 天,则统一规则为 5 天。
属性 |
说明(属性值) |
---|---|
指定规则是否为专用规则。如果指定为 exclusive,则只有此规则应用于指定的邮箱,而所有其他规则都将被忽略。如果存在多个专用规则,则将使用最后装入的专用规则。例如,如果指定了全局专用规则和本地专用规则,则将使用本地规则。如果有多个全局专用规则,则使用 configutil 列出的最后一个全局规则。(1/0) |
|
指定此规则影响的文件夹。格式必须以 user/ 开始,表示目录 store_root/partition/*/。请参见图 18–4 和表 18–9。(POSIX 正则表达式) |
|
文件夹中邮件的最大数量。传送附加的邮件时,最早的邮件将被擦除。(整数) |
|
传送附加的邮件时,擦除最早的邮件之前文件夹的最大大小。(以字节为单位的整数) |
|
邮件被擦除前的生存期(以天为单位)。(整数) |
|
在标记为将被擦除前,邮件的最大大小(以字节为单位)。(整数) |
|
宽限期。超大邮件可以保留在文件夹中的天数。(整数) |
|
邮件标题字段 |
指定标题字段和标记要删除的邮件的字符串。值不区分大小写,正则表达式不会被识别。示例:Rule1.Subject: Get Rich Now! 对于标题过期和过期日期,如果在这些标题字段中指定的日期值早于 messagedays 属性,则 imexpire 将删除邮件。如果指定了多个过期标题字段,将采用最早的过期日期。(字符串)。 |
regexp |
在创建规则时启用 UNIX 正则表达式。(1 或 0)。如果未指定,则将使用 IMAP 表达式。 |
seen 是用户打开邮件时,系统设置的邮件状态标志。如果属性 seen 设置为 and,则邮件必须已被阅读并且在规则实施前必须满足其他条件。 如果属性 seen 设置为 or,则邮件仅需已被阅读或或在规则实施前满足另一个条件。(and/or)。 |
|
deleted 是用户删除邮件时,系统设置的邮件状态标志。如果属性 deleted 设置为 and,则邮件必须被删除并且在规则实施前必须满足另一个条件。如果属性 deleted 设置为 or,则邮件仅需已被阅读或在规则实施前满足另一个条件。(and/or) |
通过在 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 设置全局过期策略(即应用于所有邮件的策略),如下所示:
在创建规则时启用 UNIX 正则表达式。
3 天后删除大于 100,000 字节的邮件。
删除用户已删除的邮件。
删除所有 Subject: 标题中带有 "Vigara Now!" 或 "XXX Porn!" 字符串的邮件。
将所有文件夹限制为容纳 1,000 封邮件。达到 1,000 封邮件后,系统将从文件夹中删除最早的邮件以保持总数为 1,000。
删除所有 365 天以前的邮件。
规则 2 为托管域 siroe.com 中的用户设置自动删除邮件策略。它将邮箱大小限制为 1 兆字节,删除已删除的邮件,并删除 14 天前的邮件。
规则 3 为用户 f.dostoevski 的 inbox 文件夹中的邮件设置自动删除邮件策略。它将删除主题行带有表达式 "On-line Casino" 的邮件。
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 属性 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/[^@]*/.* |
将规则应用到默认域中的文件夹。 |
请注意,虽然可以使用 Console 设置全局过期规则,但是使用 store.expirerule 是首选方法。如果使用 Console 或 configutil 创建的规则太多,可能会产生性能问题。
“主控制台”>“服务器组”> "Messaging Server"(打开)>“Messaging Server 控制台”>“配置”选项卡 >“邮件存储”>“过期/清除”>“添加”
图 18–4 显示了 GUI 的草图。
输入新规则的名称。
输入将从其中自动删除邮件的文件夹。
请参见上述设置 imexpire 文件夹模式。
如果此规则是与指定条件相匹配的文件夹的专用规则,则请选取“专用”框。
如果已选取此框,则此规则将优先于与指定模式相匹配的所有其他规则。有关专用复选框的详细信息,请参见表 18–8。
要创建基于文件夹大小的规则,请执行以下操作:
选取“文件夹大小约束”复选框。在“邮件计数”字段中,指定在最早的邮件被删除之前文件夹中将保留的邮件的最大数目。在“文件夹大小”字段中,指定最早的邮件被删除之前最大的文件夹大小(以字节为单位)。
要创建基于邮件生存期的规则,请选取“邮件生存期约束”复选框:
在“天数”字段中,指定邮件可以在文件夹中保存的时间(以天为单位)。
要创建基于邮件大小的规则,请执行以下操作:
选取“邮件大小限制约束”复选框。在“邮件大小限制”字段中,输入文件夹中允许的邮件的最大大小。在“宽限期”字段中,输入超大邮件被删除前在文件夹中保存的时间。
要创建基于是否已设置“已读”或“已删除”标志的规则,请执行以下操作:
选取“邮件标志约束”复选框。
对于“已读:” 字段,选择“和”将指定邮件必须已被阅读并且在规则实施前必须满足另一个条件。选择“或”将指定邮件仅需已被阅读或在规则实施前满足另一个条件。
对于“已删除:” 字段,选择“和”将指定邮件必须被删除并且在规则实施前必须满足另一个条件。选择“或”将指定邮件仅需被删除或在规则实施前满足另一个条件。
要创建基于标题字段及其值的规则,请执行以下操作:
选取“标题约束”复选框。
用以下格式输入以逗号分隔的标题和值的列表:
header1: value1, header2 : value2
示例:Subject: Work at Home!,From: virus@sesta.com
对于标题过期和过期日期,如果其日期值早于“邮件生存期约束”,则系统将删除该邮件。如果指定了多个过期标题字段,将采用最早的过期日期。(字符串)。
单击“确定”以将新规则添加到“自动删除邮件”列表中。
通过 imsched 时间安排守护进程来激活自动删除邮件。默认情况下,imsched 将在每天 23:00 点调用 imexpire,邮件将被擦除并被清除。可以通过设置表 18–10 中介绍的 configutil 参数 local.schedule.expire、local.schedule.purge 和 store.cleanupage 自定义此时间安排。
对于大型邮件存储,可能会花费很长时间才能完成过期和清除,因此您可能需要通过试验决定运行这些进程的频率。例如,如果过期/清除周期花费 10 小时,您可能不希望默认时间安排为每天运行过期和清除一次。使用 local.schedule.purge 安排过期和清除,可以为清除指定单独的时间安排。如果未设置 local.schedule.purge,则 imexpire 将在过期后执行清除。
表 18–10 过期和清除 configutil 日志和时间安排参数
参数 |
说明 |
---|---|
运行 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 运行 imexpire:30 0,8,16 * * * /opt/SUNWmsgsr/lib/imexpire 2) 在工作日早晨 3:15am 运行 imexpire:15 3 * * 1-5 /opt/SUNWmsgsr/lib/imexpire 3) 仅在星期一运行 imexpire:0 0 * * 1 /opt/SUNWmsgsr/lib/imexpire 默认值:0 23 * * * /opt/SUNWmsgsr/lib/imexpire |
|
运行 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(每四小时。) |
|
purge 将永久删除邮件前已过期或已擦除的邮件的生存期(以小时为单位)。 默认值:无 |
|
指定日志级别: 1 = 记录整个过期会话的摘要。 2 = 为每个过期的邮箱记录一条消息。 3 = 为每个过期的邮件记录一条消息。 默认值:1 |
“主控制台”>“服务器组”> "Messaging Server"(打开)>“Messaging Server 控制台”>“配置”选项卡 >“邮件存储”>“过期/清除”
此 Console 页面在顶部列出过期规则,在底部列出过期和清除时间安排。要安排过期和清除的日程,请使用“过期/清理时间安排”中的下拉式菜单为过期和清除设置月份、月份日期、星期日期(其中 0 = 星期天)、小时和分钟。
可以按几号和星期几设置日期值。如果同时设置了两者,则需同时满足两者的条件。如果设置星期的第 3 天(星期三)和月份的第 17 天,则将仅在每月的第 17 天恰好为星期三时进行清除/过期。
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(每行一个),以从过期规则中排除这些用户。