Sun Java System Messaging Server 6.3 管理指南

20.7 管理邮件类型

本节包含以下主题:

20.7.1 邮件类型概述

统一邮件服务应用程序可以接受、发送、存储和管理多种邮件类型,包括文本邮件、语音邮件、传真邮件、图像数据以及其他数据格式。消息存储允许您定义多达 63 种不同的邮件类型。

有一种利用类型处理邮件的方法,即根据邮件类型将其分组到不同的文件夹中。

引入了邮件类型功能后,无需再使用单个邮箱文件夹维护不同的邮件类型。配置邮件类型后,无论将消息存储在何处,消息存储都能够识别出来。因此,您可以在同一个文件夹中存储不同的邮件类型。您也可以执行以下任务:

20.7.1.1 规划邮件类型配置

在统一邮件服务应用程序中,给不同格式的数据分配标准的 Internet 邮件标题,以便 Messaging Server 能够存储和管理这些数据。例如,当语音邮件发送到终端用户的电话时,电话前端系统将邮件标题添加到外来语音邮件,并将其传送到消息存储。

为了识别并管理不同类型的邮件,统一邮件服务系统的所有组件都必须使用相同的邮件类型定义和标题字段来标识邮件。

在配置消息存储支持邮件类型前,您必须

例如,如果您的应用程序包括电话邮件,您可以将该邮件类型定义为 "multipart/voice-message" 并使用 Content-Type 标题字段来标识邮件类型。

然后,您可以配置电话前端系统,将以下标题信息添加到每一个将被传送到消息存储的电话邮件:

Content-Type: multipart/voice-message

接下来,您可以配置消息存储以识别 multipart/voice-message 邮件类型,这将在下面几节中介绍。

20.7.1.2 定义和使用邮件类型

定义邮件类型就是给邮件一个唯一的定义,如 multipart/voice-message。默认情况下,消息存储读取 Content-Type 标题字段以确定邮件类型。只要您愿意,也可以配置其他标题字段来标识邮件类型。

消息存储读取 Content-Type 标题字段(或其他指定的字段),忽略大小写。也就是说,即使标题的大小写字母组合与规定的不同,消息存储也视其为有效的标题字段。

消息存储只读取标题字段中的邮件类型名称。它忽略其他参数。

要定义邮件类型,可使用 configutil 实用程序设置 store.messagetype 参数的值。有关说明,请参见配置邮件类型

配置邮件类型允许消息存储标识和操作指定类型的邮件。这是统一邮件服务应用程序中管理邮件类型首要的、基本的步骤。

要充分利用消息存储提供的邮件类型功能,还应该执行以下部分或全部任务:

这些任务在以下小节中汇总:

Procedure配置邮件类型

要配置邮件类型,可使用 configutil 实用程序设置定义和标识邮件类型的 store.messagetype 参数。

  1. 通过将 store.messagetype.enable 参数设置为 on 启用邮件类型。

    configutil 参数允许消息存储标识和操作邮件类型。必须先设置该参数才能配置各个邮件类型。

    例如,输入以下命令:


    configutil -o store.messagetype.enable -v 1
  2. 通过设置 store.messagetype.x 参数定义和标识邮件类型。

    变量 x 标识消息存储中的这一特定邮件类型。 变量 x 必须是大于 0 小于 64 的整数。您可以将该参数配置为其中任何一个整数,最多能够定义 63 种邮件类型。

    使用描述类型的文本字符串定义邮件类型的值。

    例如,要定义文本邮件类型,您可以输入以下命令:


    configutil -o store.messagetype.1 -v text/plain

    要定义语音邮件类型,您可以输入以下命令:


    configutil -o store.messagetype.2 -v multipart/voice-message
  3. 通过设置 store.messagetype.x.flagname 参数为邮件类型提供标志名称。

    该参数创建一个标识邮件类型的唯一标志。在被标识类型的邮件第一次出现在消息存储中时,该标志将自动设置,在该邮件清除前该标志将一直与之关联。标志名称值是一个描述邮件类型的文本字符串。它不必与使用 store.messagetype.x 参数设置的值相同。

    变量 x 是使用 store.messagetype.x 参数定义的邮件类型的整数 ID。

    例如,要定义之前的步骤中配置的邮件类型的标志名称,可输入以下命令:


    configutil -o store.messagetype.1.flagname -v text
    
    configutil -o store.messagetype.2.flagname -v voice_message
  4. 通过设置 store.messagetype.x.quotaroot 参数配置配额根名称。

    该参数启用配额函数来标识和管理该邮件类型的配额根。参数值是一个名称—一个描述邮件类型的文本字符串。它不必与使用 store.messagetype.x 参数设置的值相同。

    变量 x 是使用 store.messagetype.x 参数定义的邮件类型的整数 ID。

    配置该参数时,您可以设置应用到指定邮件类型的配额。有关详细信息,请参见20.7.4 按邮件类型管理配额

    例如,要对之前的步骤中配置的邮件类型使用配额根,可输入以下命令:


    configutil -o store.messagetype.1.quotaroot -v text
    
    configutil -o store.messagetype.2.quotaroot -v voice
  5. 要配置其他标题字段来标识邮件类型,可设置 store.messagetype.header 参数。

    默认情况下,消息存储读取 Content-Type 标题字段来确定标题类型。只有希望使用其他标题字段来标识邮件类型时才需要配置 store.messagetype.header 参数。该参数的值是一个文本字符串。

    例如,要使用名为 X-Message-Type 的字段,可输入以下命令:


    configutil -o store.messagetype.header -v X-Message-Type

20.7.2 IMAP 命令中的邮件类型

当您为邮件类型配置 store.messagetype.x.flagname 参数时,您创建了一个标识该邮件类型的唯一标志。最终用户无法修改此标志。

Messaging Server 将邮件类型标志作为用户标志呈现给 IMAP 客户端。将邮件类型映射到用户标志允许邮件客户端使用简单的 IMAP 命令根据邮件类型来操纵邮件。

例如,您可以执行以下操作:

邮件类型用户标志是只读的。它不能被 IMAP 命令修改。

下例假定您使用这里显示的值配置邮件类型 configutil 参数:


store.messagetype.enable = yes

store.messagetype.1 = text/plain
store.messagetype.1.flagname = text
store.messagetype.1.quotaroot = text

store.messagetype.2 = multipart/voice-message
store.messagetype.2.flagname = voice_message
store.messagetype.2.quotaroot = voice

示例 20–1 基于邮件类型 configutil 配置的 IMAP FETCH 会话

以下 IMAP 会话读取当前选择的邮箱中的邮件:


2 fetch 1:2 (flags rfc822)
* 1 FETCH (FLAGS (\Seen text) RFC822 {164}

Date: Wed, 8 July 2006 03:39:57 -0700 (PDT)
From: bob.smith@siroe.com
To: john.doe@siroe.com
Subject:  Hello
Content-Type: TEXT/plain; charset=us-ascii


* 2 FETCH (FLAGS (\Seen voice_message) RFC822 {164}

Date: Wed, 8 July 2006 04:17:22 -0700 (PDT)
From: sally.lee@siroe.com
To: john.doe@siroe.com
Subject:  Our Meeting
Content-Type: MULTIPART/voice-message; ver=2.0

2 OK COMPLETED

在上例中,读取了两个邮件,一个文本邮件和一个语音邮件。

邮件类型标志使用由 store.messagetype.*.flagname 参数配置的格式来显示。

Content-Type 标题字段标识邮件类型。邮件类型名称显示为来自外来邮件。它们使用大小写字母的组合,并包括 charset=us-ascii 之类的邮件类型参数。



示例 20–2 基于邮件类型 configutil 配置的 IMAP SEARCH 会话

以下 IMAP 会话在当前选择的邮箱中搜索语音邮件:


3 search keyword voice_message
* SEARCH 2 4 6 
3 OK COMPLETED

在上例中,邮件 2、4、6 是语音邮件。用来搜索的关键字是 voice_message,即 store.messagetype.2.flagname 参数的值。


20.7.3 发送邮件类型的通知邮件

通知可以传送关于各种不同类型的邮件(例如文本邮件、语音邮件和图像数据)的状态信息。Messaging Server 使用 Sun Java System Message Queue 发送邮件类型的通知信息。有关为 Message Queue 配置 JMQ 通知插件的消息,请参见第 22 章,配置 JMQ 通知插件为 Message Queue 生成邮件

要启用 JMQ 通知插件识别特定的邮件类型,必须配置 store.messagetype 参数,包括 store.messagetype.x.flagname 参数。有关详细信息,请参见配置邮件类型

一旦配置了邮件类型,JMQ 通知邮件就能够标识特定邮件类型。您可以编写 Message Queue 客户端,以根据邮件类型解释通知邮件,并将每种类型的状态信息传送到邮件客户端。

JMQ 通知功能可以按邮件类型统计邮箱中的当前邮件数。随通知邮件发送的是指定每种邮件类型计数的数组,而不是一个计数。

例如,NewMsg 通知邮件中的数据可以通知用户在其收件箱中有 7 个新的语音邮件和 4 个新的文本邮件。

有关按邮件类型发送通知的详细信息,请参见22.3.3 特定邮件类型的通知

20.7.4 按邮件类型管理配额

为邮件类型设置配额时,应包含配额根中的值。配额根指定用户的配额。它可以针对特定的邮件类型和邮箱文件夹指定不同的配额,也可以指定应用到所有剩余邮件类型、文件夹和未按类型定义的邮件的默认配额。

有关设置和管理配额的完整信息,请参见20.8.2 配额操作原理

20.7.4.1 设置邮件类型配额之前

在为邮件类型设置配额之前,您必须配置以下参数:

20.7.4.2 设置邮件类型配额的方法

使用以下方法之一为邮件类型设置配额:

使用上述 configutil 参数或 LDAP 属性为邮件类型设置配额时,您必须使用 store.messagetype.x.quotaroot 参数指定的配额根。

20.7.4.3 邮件类型配额根示例

本节中说明的示例为用户 joe 设置以下配额:

该配额根允许 Archive 文件夹的存储配额 (100 M) 比所有其他文件夹和邮件类型的总存储配额 (60 M) 大。另外,Archive 文件夹没有邮件限制;在本例中,归档只有存储限制。

邮件类型既有存储配额又有邮件数量配额。

邮件类型配额适用于所有这些类型的邮件之和,无论它们是存储在 Archive 文件夹还是任何其他文件夹中。

对于所有非文本或非语音邮件类型且未存储在 Archive 文件夹中的邮件,将应用默认的邮箱配额。也就是说,邮件类型配额和 Archive 配额不记为默认邮箱配额的一部分。

要在本例中设置配额根,应该执行以下步骤:

  1. store.messagetype.x.quotaroot 参数配置如下:


    store.messagetype.1.quotaroot = text
    
    store.messagetype.2.quotaroot = voice
  2. 将用户 joemailQuota 属性配置如下:


    mailQuota: 20M;#text%10M;#voice%10M;Archive%100M
  3. 将用户 joemailMsgQuota 属性配置如下:


    mailMsgQuota: 5000;#text%2000;#voice%200

当运行 getquotaroot IMAP 命令时,得到的 IMAP 会话显示用户 joe 邮箱的所有配额根,如下所示:


1 getquotaroot INBOX
* QUOTAROOT INBOX user/joe user/joe/#text user/joe/#voice
* QUOTA user/joe (STORAGE 12340 20480 MESSAGE 148 5000)
* QUOTA user/joe/#text (STORAGE 1966 10240 MESSAGE 92 2000)
* QUOTA user/joe/#voice (STORAGE 7050 10240 MESSAGE 24 200)

2 getquotaroot Archive
* QUOTAROOT user/joe/Archive user/joe/#text user/joe/#voice
* QUOTA user/joe/Archive (STORAGE 35424 102400)
* QUOTA user/joe/#text (STORAGE 1966 10240 MESSAGE 92 2000)

* QUOTA user/joe/#voice (STORAGE 7050 10240 MESSAGE 24 200)

20.7.5 按邮件类型制定邮件过期规则

过期和清除功能允许您根据过期规则中定义的条件,将邮件从一个文件夹移动到另一个文件夹、归档邮件,以及从消息存储中删除邮件。可以使用 imexpire 实用程序执行这些任务。

imexpire 实用程序由管理员运行,因此不受强制配额的限制。

有关如何编写过期规则和使用 imexpire 实用程序的信息,请参见20.9 设置自动删除邮件(过期和清除)功能

您可以编写过期规则使不同类型的邮件根据不同的条件过期。

过期功能非常灵活,为设置过期条件提供了许多选择。本节将介绍一个示例,其中文本邮件和语音邮件将根据不同的条件过期。

该示例假设您已经将文本邮件和语音邮件配置如下:


store.messagetype.1 = text/plain

store.messagetype.2 = multipart/voice-message

同时假设将消息存储配置为读取 Content-Type 标题字段来确定邮件类型。


示例 20–3 不同邮件类型的过期规则示例


TextInbox.folderpattern: user/%/INBOX
TextInbox.messageheader.Content-Type: text/plain
TextInbox.messagedays: 365
TextInbox.action: fileinto:Archive


VoiceInbox.folderpattern: user/%/INBOX
VoiceInbox.messageheader.Content-Type: multipart/voice-message
VoiceInbox.savedays: 14
VoiceInbox.action: fileinto:OldMail

VoiceOldMail.folderpattern: user/%/OldMail
VoiceOldMail.messageheader.Content-Type: multipart/voice-message
VoiceOldMail.savedays: 30
VoiceOldMail.action: fileinto:Trash

Trash.folderpattern: user/%/Trash
Trash.savedays: 7
Trash.action: discard

在本例中,文本邮件和语音邮件以不同的方式过期,它们遵守不同的时间安排,如下所示:

注意:savedays 规则使邮件在保存指定天数之后过期。在典型的语音邮件系统中,用户可以在语音邮件菜单中保存语音邮件。对于文本邮件,当它移动到一个文件夹时被保存。messagedays 规则使邮件在第一次到达消息存储指定的天数之后过期,无论它存储在哪个文件夹或被移动了多少次。