本章說明如何配置 JMQ 通知外掛程式,以產生將由郵件佇列服務中的用戶端使用之郵件。
本章包含以下各節:第 22 章, 配置 JMQ 通知外掛程式以產生郵件佇列的郵件
Messaging Server 通知外掛程式可讓您遞送通知郵件至郵件傳送服務或事件服務。郵件傳送服務會傳送通知給用戶 (用戶端介面),再由其篩選並遞送郵件給指定的使用者。
例如,當使用者的電子信箱有新的電子郵件送達時,通知外掛程式會遞送一封通知郵件至郵件傳送服務。郵件用戶 (郵件傳送服務的元件) 會接收通知並將其傳送至使用者的電子郵件用戶端 (如 Communications Express 或 Mozilla 郵件)。接著,電子郵件用戶端會在使用者的電腦螢幕上顯示一則快顯訊息:「You have received a new message. (您已收到一封新郵件。)」
其他範例:如果使用者的電子信箱超過配額,通知外掛程式會產生超過配額的通知郵件。郵件用戶會傳送警告給使用者及需要通知此事件的管理員。
您可以配置 Messaging Server 遞送通知至兩種不同的郵件傳送服務:
Sun Java System Message Queue 3.6 2005Q4
事件通知服務
郵件佇列服務實作 Java Messaging Service (JMS) 規格,提供郵件代理程式、建立產生或使用郵件的用戶端之介面,以及管理服務與控制。郵件佇列遵守 JMS 之路由與遞送功能、協定及郵件格式的標準。
事件通知服務是 Messaging Server 和 Sun Java System Calendar Server 隨附的元件。此專用服務可讓使用者發佈/訂閱傳送及接收事件通知的架構。
您可以為郵件佇列、事件通知服務,或同時為兩個服務配置通知產生器。
本章僅會說明如何為郵件佇列配置通知。
如需有關事件通知服務的資訊,請參閱「Sun Java System Communications Suite Event Notification Service Guide」。
若要 Messaging Server 產生通知至郵件佇列或事件通知服務,您必須配置該服務的外掛程式:
JMQ 通知外掛程式可讓您遞送通知郵件至郵件佇列代理程式。
iBiff 外掛程式可讓您向事件通知服務發佈通知事件。
如需有關如何載入 iBiff 外掛程式與配置事件通知服務的資訊,請參閱「Sun Java System Messaging Server Administration Guide」中的「Appendix B: Administering Event Notification Service in Messaging Server」。
JMQ 通知外掛程式和郵件佇列提供以下優點:
郵件佇列實作 JMS 標準。
您可以使用郵件佇列產生郵件至主題或佇列,或至這兩種遞送方法。如需簡短的定義,請參閱22.1.3.1 發佈至主題或佇列。
郵件佇列在郵件分發期間提供增強的負載平衡,特別是當郵件產生至佇列時。
JMQ 通知外掛程式可讓您配置最多五個通知外掛程式。不同的外掛程式可產生郵件至主題、佇列、事件通知服務等。如需詳細資訊,請參閱22.1.3.2 使用多個 JMQ 通知外掛程式。
郵件佇列提供可靠的通知遞送。
例如,如果您配置 JMQ 通知外掛程式產生啟用永久性旗標的郵件,該郵件會保留在郵件佇列代理程式中,直到用戶接收郵件為止。郵件會進行儲存,即使在伺服器當機的情況下,仍可擷取郵件並提供給適當的用戶。
主題和佇列使用不同的郵件遞送式樣;可各自在郵件佇列服務中進行配置。
主題。當郵件產生器傳送郵件至主題時,會使用發佈/訂閱架構。在此廣播式樣中,產生器會將郵件傳送至主題目標。此主題目標的可訂閱用戶數不限。訂閱主題的每個用戶可取得各自的郵件副本。如果此主題沒有用戶訂閱,則會捨棄郵件。
事件通知服務也使用發佈/訂閱架構;這和郵件佇列中所定義的主題式樣類似。
佇列。當郵件產生器傳送郵件至佇列時,會使用點對點架構。在此式樣中,產生器會將郵件傳送至佇列目標,僅有一個用戶可從中接收郵件。如果有多個用戶等候佇列中的郵件,僅有一名訂閱者會收到郵件。如果沒有等候的用戶,郵件會保留直到郵件逾時,或用戶表示對此佇列感興趣為止。
產生郵件至佇列可讓您在多個用戶之間分攤郵件負載。
您可以配置一到五個通知外掛程式。
Messaging Server 在以下預設位置提供外掛程式程式庫:
/opt/SUNWmsgsr/lib/libjmqnotify
configutil 公用程式可用以指定外掛程式的參數,並將外掛程式指向可執行檔程式碼的程式庫。
如果您指定多個外掛程式,每個外掛程式會產生彼此互不關聯的通知郵件。例如,如果使用刪除郵件參數配置兩個外掛程式,且從使用者的電子信箱刪除一封郵件,則兩個外掛程式皆會產生通知郵件。
您可以配置多個外掛程式,針對不同的用途使用不同的郵件分發式樣。例如,您可以配置三個不同的外掛程式以產生郵件
至佇列 (使用郵件佇列)
至主題 (使用郵件佇列)
至事件通知服務
您必須針對每個配置的外掛程式定義一組獨立的 configutil 參數。
這些參數會判定兩種資訊:
要產生的通知郵件種類。例如,啟用 LogUser 參數會導致在每次使用者登入或登出時傳送通知郵件。
郵件佇列所需的配置資訊。例如,jmqHost 參數會識別郵件佇列代理程式執行所在的主機 IP 位址。
如需有關如何配置外掛程式的說明,請參閱配置 JMQ 通知外掛程式。
本節簡短說明 JMQ 通知外掛程式如何符合完整郵件佇列服務的環境,並接著提供有關配置 JMQ 通知外掛程式的詳細說明。
JMQ 通知外掛程式僅是郵件佇列服務的一部分。郵件傳送服務也包含使用郵件的用戶端及郵件佇列基礎架構 (代理程式、管理元件等)。
以下步驟概述您應執行以建立支援 Messaging Server 的郵件佇列服務之作業:
定義通知郵件服務。
定義 Messaging Server 安裝所需的通知郵件。郵件服務開發生命週期的規劃和設計階段不在本章的論述範圍內。但在您配置 JMQ 通知外掛程式之前,應回答以下設計問題:
需要為哪些郵件事件產生通知?如需可用通知郵件的清單,請參閱22.3.1 通知郵件。
打算產生郵件至佇列、主題或兩者?
是否打算同時使用專用事件通知服務和郵件佇列服務?
回答這些問題有助於決定要配置一個通知外掛程式或多個外掛程式,並判定如何配置每個外掛程式。
安裝、配置及部署郵件佇列產品。
如需有關安裝郵件佇列的資訊,請參閱「Sun Java System Message Queue Installation Guide」。
如需有關配置及部署郵件佇列的資訊,請參閱「Sun Java System Message Queue Administration Guide」。
編寫將使用 JMQ 通知郵件的一或多個郵件佇列用戶端。
用戶端必須符合郵件佇列用戶端 API 的需求。以下路徑提供以 C 編寫的用戶端原始碼之簡單範例:
/opt/SUNWmsgsr/examples/jmqsdk/ |
原始碼檔案名稱為 jmqclient.c。
此用戶端原始碼會接收 libjmqnotify 程式庫中的參數所定義之 JMQ 通知郵件的郵件,並接著將郵件輸出傳送至 stdout。
如需有關以 C 或 Java 編寫郵件佇列用戶端的資訊,請參閱「Sun Java System Message Queue Developer's Guide for C Clients」或「Sun Java System Message Queue Developer's Guide for Java Clients」。
配置與啟用產生通知郵件的 JMQ 通知外掛程式。
本章接下來會說明如何配置通知外掛程式。
配置與啟動執行階段郵件佇列用戶端。
如需有關部署執行階段郵件佇列用戶端的資訊,請參閱「Sun Java System Message Queue Administration Guide」。
在此程序中,請先配置將產生通知的郵件事件。接著指定郵件佇列所需的資訊。最後 (在步驟 9 中),請在外掛程式程式庫的名稱之後指定參數,以配置外掛程式名稱:
'/opt/SUNWmsgsr/lib/libjmqnotify$plug-in_name' |
如果未指定外掛程式名稱,預設會使用 jmqnotify。
應安裝、配置及部署以下產品:
Sun Java System Messaging Server
Sun Java System 郵件佇列 3.6 SP3 2005Q4 或更新版本
將在以下步驟配置的大部分 configutil 參數,均為選擇性參數。如需這些參數的預設值清單,請參閱表 22–2。
配置通知郵件參數。
針對您想納入外掛程式的每種通知郵件,搭配 configutil 公用程式使用 local.store.notifyplugin 指令。
例如,若要啟用新郵件的通知,請輸入:
configutil -o local.store.notifyplugin.jmqnotify.NewMsg.enable -v 1 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 1 啟用此郵件的通知。值 0 會停用此郵件的通知。
如需所有 JMQ 通知郵件的清單,請參閱22.3.1 通知郵件。
如需啟用 JMQ 通知郵件的 configutil 參數定義,請參閱「Sun Java System Messaging Server Administration Reference」中的「Chapter 3: Messaging Server Configuration」。
部分通知郵件使用多個 configutil 參數啟用郵件的其他功能。例如,部分郵件可在通知文字中帶有郵件標頭。如需有關如何配置這些郵件的說明,請參閱newflags 和 oldflags 特性的語法。
您必須分別為每個配置的外掛程式配置參數。
因此,如果您配置兩個名為 jmq1 和 jmq2 的外掛程式,並要為這兩個外掛程式啟用新郵件通知,必須執行 local.store.notifyplugin 指令兩次:
configutil -o local.store.notifyplugin.jmq1.NewMsg.enable -v 1 |
configutil -o local.store.notifyplugin.jmq2.NewMsg.enable -v 1 |
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.jmqHost -v "127.0.0.1" |
其中 jmqnotify 是外掛程式的名稱,
而 "127.0.0.1" 是郵件佇列代理程式的主機電腦 IP 位址。
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.jmqPort -v "7676" |
其中 jmqnotify 是外掛程式的名稱,
而 "7676" 是郵件佇列代理程式的連接埠。
指定授權產生郵件至服務的郵件佇列使用者之使用者 ID 和密碼。
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.jmqUser -v "guest" |
configutil -o local.store.notifyplugin.jmqnotify.jmqPwd -v "%$#a62t&" |
其中 jmqnotify 是外掛程式的名稱,
而 "guest" 和 "%$#a62t&" 分別是郵件佇列使用者的使用者 ID 和密碼。
請按照以下步驟:
指定目標是主題或佇列。
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.DestinationType -v "queue" |
其中 jmqnotify 是外掛程式的名稱,
而 "queue" 會指定目標為佇列。此參數允許的值為 "queue" 和 "topic"。
指定目標名稱。
例如,輸入以下其中一個指令:
configutil -o local.store.notifyplugin.jmqnotify.jmqQueue -v "JES-MS" |
或
configutil -o local.store.notifyplugin.jmqnotify.jmqTopic -v "JES-MS" |
其中 jmqnotify 是外掛程式的名稱,
jmqQueue 或 jmqTopic 識別目標類型。jmqQueue 和 jmqTopic 參數性質相同但彼此互異;您僅能在一個外掛程式中使用其中一種參數。
"JES-MS" 是郵件將傳送至的佇列或主題範例名稱。
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.Priority -v 3 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 3 是指定給此外掛程式所產生之郵件的郵件佇列優先順序。
Priority 的預設值為 4。
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.ttl -v 100 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 100 指定郵件佇列服務保留郵件 100 毫秒,再進行遞送或捨棄。值 0 表示會永久保留郵件;郵件不會逾時。
例如,輸入以下指令:
configutil -o local.store.notifyplugin.jmqnotify.Persistent -v 1 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 1 指定郵件佇列服務中使用的郵件為永久性。允許的值為 1 (永久性) 和 0 (非永久性)。
若要使用預設名稱配置單一外掛程式,您可以輸入外掛程式程式庫之完全合格的名稱,或程式庫的名稱及其外掛程式參數:
configutil -o local.store.notifyplugin -v /opt/SUNWmsgsr/lib/libjmqnotify |
或
configutil -o local.store.notifyplugin -v '/opt/SUNWmsgsr/lib/libjmqnotify$jmqnotify' |
其中 libjmqnotify 是程式庫名稱
而 jmqnotify 是外掛程式參數的預設名稱。
使用美元符號 ($) 分隔程式庫名稱和參數。
以單引號括住整個值 ('值');如果未這麼做,shell 會解譯美元符號。
預設外掛程式讀取的 configutil 參數有以下名稱:
local.store.notifyplugin.jmqnotify.* |
若要配置 jmq42 等不同的外掛程式名稱,請輸入以下指令:
configutil -o local.store.notifyplugin -v '/opt/SUNWmsgsr/lib/libjmqnotify$jmq42' |
jmq42 外掛程式讀取的 configutil 參數有以下名稱:
local.store.notifyplugin.jmq42.* |
為您打算建立的每個外掛程式配置一組獨立的 JMQ 通知參數。
例如,假設您配置兩個名為 jmq1 和 jmq2 的外掛程式,且您要為這兩個外掛程式啟用新郵件通知,並僅為 jmq2 外掛程式啟用清除郵件通知。在此情況下,您需要如下執行 local.store.notifyplugin 指令三次:
configutil -o local.store.notifyplugin.jmq1.NewMsg.enable -v 1 |
configutil -o local.store.notifyplugin.jmq2.NewMsg.enable -v 1 |
configutil -o local.store.notifyplugin.jmq2.PurgeMsg.enable -v 1 |
您也必須指定啟用外掛程式與郵件佇列服務進行通訊的參數。
如需有關配置所有通知參數的逐步說明,請參閱配置 JMQ 通知外掛程式。
配置外掛程式名稱。
若要配置兩個名為 jmq1 和 jmq2 的外掛程式,請輸入以下指令:
configutil -o local.store.notifyplugin -v '/opt/SUNWmsgsr/lib/libjmqnotify$jmq1$$/opt/SUNWmsgsr/ \ lib/libjmqnotify$jmq2' |
在此範例中,會執行兩個外掛程式程式庫實例。
使用一個美元符號 ($) 分隔程式庫名稱和指定外掛程式名稱的參數。
使用兩個美元符號 ($$) 分隔第一個外掛程式實例和第二個外掛程式實例。
以單引號括住整個值 ('值');如果未這麼做,shell 會解譯美元符號。
在此範例中,第一個實例會從名為 jmq1 的參數建構其配置:
local.store.notify.jmq1.* |
第二個實例會從名為 jmq2 的參數建構其配置:
local.store.notify.jmq2.* |
大部分的通知郵件可透過執行單一 local.store.notifyplugin 指令來指定。
但是,以下通知郵件會 (或可能會) 使用多個 local.store.notifyplugin 指令進行配置:
NewMsg
UpdateMsg
DeleteMsg
MsgFlags
以下程序說明如何設定這些通知郵件。
您可以將郵件標頭和郵件內文,加入有新的或更新的電子郵件時所傳送之通知郵件文字中。
您可以選擇是否要包含郵件標頭和郵件內文;您可以包含兩個功能、僅包含一個功能或不包含任何功能。預設為傳送不含郵件標頭或郵件內文的郵件。
指定新郵件通知或更新郵件通知:
configutil -o local.store.notifyplugin.jmqnotify.NewMsg.enable -v 1 |
configutil -o local.store.notifyplugin.jmqnotify.UpdateMsg.enable -v 1 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 1 啟用這些郵件的通知。值 0 會停用通知。
以大於零的值指定 maxHeaderSize 參數,如以下範例所示:
configutil -o local.store.notifyplugin.jmqnotify.maxHeaderSize -v 1024 |
其中 jmqnotify 是外掛程式的名稱,
而 1024 是可傳送的標頭大小上限。maxHeaderSize 的預設值為 0,表示傳送的郵件無標頭資訊。
以大於零的值指定 maxBodySize 參數,如以下範例所示:
configutil -o local.store.notifyplugin.jmqnotify.maxBodySize -v 1024 |
其中 jmqnotify 是外掛程式的名稱,
而 5120 是可傳送的郵件內文大小上限。maxBodySize 的預設值為 0,表示傳送的郵件無內文。
您可以將郵件標頭加入刪除電子郵件時所傳送的通知郵件文字中。
可以選擇是否要包含郵件標頭。預設為傳送不含郵件標頭的通知。
在刪除電子郵件時傳送通知:
configutil -o local.store.notifyplugin.jmqnotify.DeleteMsg.enable -v 1 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 1 啟用此郵件的通知。值 0 會停用通知。
configutil -o local.store.notifyplugin.jmqnotify.ExpungeHeaders -v 1 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 1 表示刪除郵件通知會帶有郵件標頭。ExpungeHeaders 的預設值為 0,表示禁止刪除郵件通知帶有標頭資訊。
您必須配置 ExpungeHeaders 參數讓 DeleteMsg 郵件帶有郵件標頭。
以大於零的值指定 maxHeaderSize 參數,如以下範例所示:
configutil -o local.store.notifyplugin.jmqnotify.maxHeaderSize -v 1024 |
其中 jmqnotify 是外掛程式的名稱,
而 1024 是可傳送的標頭大小上限。maxHeaderSize 的預設值為 0,表示傳送的郵件無標頭資訊。
您可以配置通知郵件,使其在電子郵件變更狀態時進行傳送。
每次電子郵件的狀態旗標變更為以下其中之一時,會產生郵件旗標通知:
Answered
Flagged
Deleted
Seen (read)
Draft
傳送郵件旗標通知時,該通知會帶有以下特性:
在電子郵件狀態變更前設定的旗標
在電子郵件狀態變更後設定的旗標
此資訊隨附在 oldflags 和 newflags 兩個特性中,這兩個特性為 5 個字元的字串。
如需有關這兩個特性值的說明,請參閱newflags 和 oldflags 特性的語法。
若要啟用郵件旗標通知,您必須配置以下 configutil 參數:
local.store.notifyplugin.MsgFlags
local.store.notifyplugin.*.MsgFlags.enable
第一個 MsgFlags 參數可讓 IMAP 伺服器及郵件儲存識別並追蹤狀態旗標的變更值,以在通知郵件中遞送此資訊。
此參數會套用到所有通知外掛程式。因此,如果有任何通知外掛程式使用郵件旗標通知,則必須啟用此參數。如果沒有外掛程式使用郵件旗標通知,請確定停用此參數 (預設值)。
第二個參數 *.MsgFlags.enable 可為特定外掛程式程式庫傳送郵件旗標通知。
必須同時配置這兩個參數才能啟用郵件旗標通知。
啟用狀態旗標的追蹤功能並讓郵件旗標通知帶有狀態資訊:
configutil -o local.store.notifyplugin.MsgFlags -v 1 |
其中 -v 1 可讓郵件旗標資訊隨郵件旗標通知傳送。值 0 會停用此通知。
讓特定外掛程式傳送郵件旗標通知:
configutil -o local.store.notifyplugin.jmqnotify.MsgFlags.enable -v 1 |
其中 jmqnotify 是外掛程式的名稱,
而 -v 1 啟用此外掛程式的郵件旗標通知。值 0 會停用通知。
本節說明以下主題:
您可以為郵件儲存中發生的各種事件產生通知郵件。例如,當使用者登入時,會產生一封 Login 郵件並遞送至郵件佇列代理程式。
configutil 參數指定各種要產生的郵件。您可以配置各種 configutil 參數,判定將產生郵件的事件。configutil 參數會由一或多個 JMQ 通知外掛程式程式庫所參照。
所有郵件會依據目標類型設定為 "topic" 或 "queue",遞送至主題或佇列。如需有關如何配置郵件佇列目標的資訊,請參閱配置 JMQ 通知外掛程式。
每封郵件由以下郵件標頭所識別:
MQ_MESSAGE_TYPE_HEADER_PROPERTY
JMQ 通知外掛程式支援下表所示的郵件。
如需啟用這些郵件的 configutil 參數清單,請參閱22.3.4 configutil 參數的預設值。
表 22–1 JMQ 通知郵件
通知郵件 |
說明 |
---|---|
DeleteMsg |
標示為「Deleted」的郵件會從電子信箱移除。這相當於 IMAP 的永久刪除。 |
Login |
使用者從 IMAP、HTTP 或 POP 登入。(此郵件以 configutil 參數 local.store.notifyplugin.*.LogUser.enable 啟用。) |
Logout |
使用者從 IMAP、HTTP 或 POP 登出。(此郵件以 configutil 參數 local.store.notifyplugin.*.LogUser.enable 啟用。) |
MsgFlags |
郵件上的郵件旗標已變更。此郵件帶有新舊旗標。 |
NewMsg |
系統已接收新郵件並置於使用者的電子信箱。可包含郵件標頭和內文。 |
OverQuota |
使用者的電子信箱超過其中一個配額 (diskquota、msgquota) 而導致作業失敗。MTA 通道會保留郵件,直到配額變更或使用者的電子信箱計數低於配額為止。如果郵件在 MTA 保留期間過期,則會永久刪除。 |
PurgeMsg |
郵件由伺服器程序 imexpire 從電子信箱永久刪除 (由於過期)。此為伺服器端的永久刪除,而 DeleteMsg 為用戶端的永久刪除。這與清除不同。 |
ReadMsg |
已讀取電子信箱中的郵件。(在 IMAP 協定中,此郵件會標示為「Seen」。) |
TrashMsg |
郵件由 IMAP 或 HTTP 標示為刪除。視郵件用戶端的配置而定,使用者可能仍能檢視資料夾中的郵件。執行永久刪除時,會從資料夾移除郵件。 |
UnderQuota |
OverQuota 狀態的配額回復到正常。 |
UpdateMsg |
郵件由 IMAP 作業附加至電子信箱。例如,使用者將電子郵件複製到電子信箱。可包含郵件標頭和內文。 |
以下規則和使用準則套用到支援的通知郵件:
大部分通知郵件的文字為半形空格。(使用空格的原因在於,郵件佇列不允許郵件內文空白。)以下郵件例外:
NewMsg、UpdateMsg 和 DeleteMsg 郵件配置了 maxHeaderSize 參數時,可包含郵件標頭。您必須將 maxHeaderSize 設定為大於零的值。
若要讓 DeleteMsg 郵件包含郵件標頭,您也必須將 ExpungeHeaders 參數設定為值 1。
NewMsg 和 UpdateMsg 郵件配置了 maxBodySize 參數時,可包含郵件內文。您必須將 maxBodySize 設定為大於零的值。
NewMsg 和 UpdateMsg 預設不會遞送 (關閉) 郵件內文。這可避免郵件佇列超載。其他郵件不包含郵件內文。
通知郵件可單獨針對 INBOX 的變更而產生,或針對 INBOX 和所有其他資料夾的變更而產生。以下配置參數可僅針對 INBOX (值 = 0) 或同時針對 INBOX 和所有其他資料夾 (值 = 1):
local.store.notifyplugin.jmqnotify.noneInbox.enable
預設設定是僅從 INBOX 產生郵件 (值 = 0)。
沒有機制可以選取資料夾;當啟用變數時 (值 = 1),會包含所有資料夾。
NewMsg 通知僅會在郵件置於使用者的電子信箱之後發出 (而不是「在伺服器接受並排入郵件佇列之後」)。
無法為 POP3 用戶端存取產生郵件。
所有郵件可透過輸入 XNOTNOTIFY 抑制。例如,您可能會輸入僅用於事務性工作 (不用通知使用者) 的 IMAP 程序檔,以抑制所有郵件。
通知可遞送不同郵件類型 (如文字郵件、語音郵件和影像資料) 的相關狀態資訊。使用者通常需要在相同的郵件資料夾中儲存這些異質的郵件類型。例如,使用者可能需要讓新的文字郵件和語音郵件送達使用者的行動電話收件匣中。
若要配置這些郵件類型,請使用 store.messagetype.enable 等 configutil 指令。如需有關配置和管理郵件類型的資訊,請參閱「第 18 章:管理郵件儲存」中的「管理郵件類型」。
郵件類型配置完成後,JMQ 通知訊息即可識別特定郵件類型。您可以編寫郵件佇列用戶端,依郵件類型解譯通知郵件,並將各種類型的相關狀態資訊遞送至郵件用戶端。
例如,假設使用者的電子信箱有不同類型的新郵件送達。NewMsg 通知郵件可包含此資料,告知使用者其收件匣中有七封新的語音郵件和四封新的文字郵件。
以下通知郵件可帶有追蹤特定郵件類型的資訊:
NewMsg UpdateMsg ReadMsg TrashMsg DeleteMsg PurgeMsg OverQuota UnderQuota |
JMQ 通知功能會依郵件類型,計算目前在電子信箱的郵件數。此計數結果不會單筆傳送,而會以陣列指出每種郵件類型的計數,並隨通知郵件傳送。
numMsgs 特性會包含此郵件特定的計數,並隨通知郵件遞送。對於 ReadMsg 和 TrashMsg 通知郵件,已讀取的郵件數 (numSeen) 和標記為已刪除的郵件數 (numDeleted) 也會依郵件類型計算。
事件通知服務不支援郵件類型。使用 JMQ 通知外掛程式遞送郵件類型的相關資訊。
郵件佇列所需的通知郵件和配置資訊會以 configutil 參數進行配置。
表 22–2 顯示這些參數及其預設值。
如需 configutil 參數的完整定義,請參閱「Sun Java System Messaging Server Administration Reference」中的「Chapter 3: Messaging Server Configuration」。
表 22–2 configutil 參數及其預設值
configutil 參數 |
預設值 |
---|---|
local.store.notifyplugin.*.maxBodySize |
0 — 已停用 |
local.store.notifyplugin.*.maxHeaderSize |
0 — 已停用 |
local.store.notifyplugin.*.NewMsg.enable |
1 — 已啟用 |
local.store.notifyplugin.*.UpdateMsg.enable |
1 — 已啟用 |
local.store.notifyplugin.*.ReadMsg.enable |
1 — 已啟用 |
local.store.notifyplugin.*.DeleteMsg.enable |
1 — 已啟用 |
local.store.notifyplugin.*.PurgeMsg.enable |
1 — 已啟用 |
local.store.notifyplugin.*.LogUser.enable |
1 — 已啟用 |
local.store.notifyplugin.*.MsgFlags.enable |
0 — 已停用 |
local.store.notifyplugin.*.noneInBox.enable |
0 — 已停用 |
local.store.notifyplugin.*.jmqHost |
「127.0.0.1」 |
local.store.notifyplugin.*.jmqPort |
7676 |
local.store.notifyplugin.*.jmqTopic |
「JES-MS」 |
local.store.notifyplugin.*.jmqQueue |
「JES-MS」 |
local.store.notifyplugin.*.jmqUser |
「guest」 |
local.store.notifyplugin.*.jmqPwd |
「guest」 |
local.store.notifyplugin.*.destinationtype |
「topic」 |
local.store.notifyplugin.*.Priority |
4 |
local.store.notifyplugin.*.ttl |
0 — 表示郵件永遠不會逾時。 |
local.store.notifyplugin.*.Persistent |
1 — 已啟用 |
每封郵件帶有特性中所定義的其他資訊。不同郵件有不同特性。例如,NewMsg 表示新郵件的 IMAP uid。
表 22–3 說明標準通知郵件特性。所有 JMS 郵件皆有這些特性。
表 22–3 標準通知郵件特性
特性 |
資料類型 |
說明 |
---|---|---|
hostname |
ConstMQString |
產生郵件的主機電腦名稱。 |
pid |
MQInt32 |
產生郵件的程序 ID。 |
process |
ConstMQString |
指定產生郵件的程序名稱。 |
timestamp |
MQFloat64 |
指定開始時間 (1970 年 1 月 1 日午夜 GMT) 以來的毫秒數。 |
表 22–4 說明特定通知郵件帶有的特性。
每封郵件包含下表所示的特性之子集。如需與每封郵件相關的特性清單,請參閱表 22–5。
表 22–4 特定通知郵件的專屬特性
特性 |
資料類型 |
說明 |
---|---|---|
client |
ConstMQString |
與郵件相關的郵件佇列用戶端之 IP 位址。 |
diskquota |
MQInt32 |
與郵件相關的使用者之磁碟空間配額 (以 KB 為單位)。此值設定為 -1 表示沒有配額。 |
diskquotaused |
MQInt32 |
與郵件相關的使用者所用的磁碟空間量 (以 KB 為單位)。 |
hdrLen |
MQInt32 |
郵件標頭的大小。請注意,這可能和郵件內文中的標頭大小不同,因為內文會遭截斷。 |
imapUid |
MQInt32 |
與郵件相關的 IMAP uid 特性。 |
lastUid |
MQInt32 |
電子信箱中所用的最後一個 IMAP uid 值。 |
mailboxName |
ConstMQstring |
與事件相關的郵件儲存電子信箱名稱。mailboxName 使用以下其中一種格式 (其中 uid 是使用者的唯一識別碼): uid — 識別預設 (主要) 網域中的使用者收件匣。 uid@domain — 識別託管網域中的使用者收件匣。 uid/mailboxname — 識別預設網域中最上層的使用者電子信箱。 uid@domain/mailboxname — 識別託管網域中最上層的使用者電子信箱。 uid/foldername/mailboxname — 識別預設網域中使用者資料夾內的電子信箱。 uid@domain/foldername/mailboxname — 識別託管網域中使用者資料夾內的電子信箱。 |
msgquota |
MQInt32 |
使用者最大郵件數的配額。此值設定為 -1 表示沒有配額。 |
newflags |
ConstMQString |
目前作業變更旗標之後為使用者電子信箱的郵件設定的旗標。產生 MsgFlags 通知郵件時一律會有此特性和 oldflags。 如需 newflags 值的語法,請參閱此表之後的newflags 和 oldflags 特性的語法。 |
numDeleted |
MQInt32 |
在電子信箱中標示為已刪除的郵件數。 此數目會計算由電子信箱所有者刪除的郵件數。如果其他使用者具有此電子信箱的存取權,計數中不會包含這些使用者在電子信箱中的動作。(但是,其他使用者的動作可能觸發 DeleteMsg 等通知)。 |
numDeletednn |
MQInt32 |
在電子信箱中依各種郵件類型指定且標示為已刪除的郵件總數。如果配置了郵件類型, numDeletednn 特性會帶有各種郵件類型 nn 的計數。 numDeleted 特性一律會傳送;此特性會計算包含所有類型標示為已刪除的所有郵件總數。 例如,如果有 20 封郵件標示為已刪除,其中 10 封屬於類型 3,7 封屬於類型 16,而其餘郵件為無法辨識的類型,則此通知會帶有以下特性和計數: numDeleted=20 numDeleted3=10 numDeleted16=7 |
numMsgs |
MQInt32 |
電子信箱目前的郵件總數。 |
numMsgsnn |
MQInt32 |
電子信箱目前依各種郵件類型指定的郵件總數。如果配置了郵件類型, numMsgsnn 特性會帶有各種郵件類型 nn 的計數。 numMsgs 特性一律會傳送;此特性會計算電子信箱中包含所有類型的所有郵件總數。 例如,如果目前在電子信箱中有 20 封郵件,其中 10 封屬於類型 3,7 封屬於類型 16,而其餘郵件為無法辨識的類型,則此通知會帶有以下特性和計數: numMsgs=20 numMsgs3=10 numMsgs16=7 |
numSeen |
MQInt32 |
在電子信箱中標示為已讀取的郵件數。 此數目會計算由電子信箱所有者讀取的郵件數。如果其他使用者具有此電子信箱的存取權,計數中不會包含這些使用者在電子信箱中的動作。(但是,其他使用者的動作可能觸發 ReadMsg 等通知)。 |
numSeennn |
MQInt32 |
在電子信箱中依各種郵件類型指定且標示為已讀取的郵件總數。如果配置了郵件類型,numSeen nn 特性會帶有各種郵件類型 nn 的計數。 numSeen 特性一律會傳送;此特性會計算包含所有類型標示為已讀取的所有郵件總數。 例如,如果有 20 封郵件標示為已讀取,其中 10 封屬於類型 3,7 封屬於類型 16,而其餘郵件為無法辨識的類型,則此通知會帶有以下特性和計數: numSeen=20 numSeen3=10 numSeen16=7 |
numSeenDeleted |
MQInt32 |
電子信箱中標示為已讀取且已刪除的郵件數。 此數目會計算由電子信箱所有者標示為已讀取且已刪除的郵件數。如果其他使用者具有此電子信箱的存取權,計數中不會包含這些使用者在電子信箱中的動作。(但是,其他使用者的動作可能觸發 ReadMsg 和 DeleteMsg 等通知)。 |
numSeenDeletednn |
MQInt32 |
在電子信箱中依各種郵件類型指定且標示為已讀取且已刪除的郵件總數。如果配置了郵件類型,numSeenDeleted nn 特性會帶有各種郵件類型 nn 的計數。 numSeenDeleted 特性一律會傳送;此特性會計算包含所有類型標示為已讀取且已刪除的所有郵件總數。 例如,如果有 20 封郵件標示為已讀取且已刪除,其中 10 封屬於類型 3,7 封屬於類型 16,而其餘郵件為無法辨識的類型,則此通知會帶有以下特性和計數: numSeenDeleted=20 numSeenDeleted3=10 numSeenDeleted16=7 |
oldflags |
ConstMQString |
目前作業變更旗標之前為使用者電子信箱的郵件設定的旗標。產生 MsgFlags 通知郵件時一律會有此特性和 newflags。 如需 oldflags 值的語法,請參閱此表之後的newflags 和 oldflags 特性的語法。 |
quotaRoot |
ConstMQString |
可以是使用者名稱、資料夾名稱或郵件類型。 |
size |
MQInt32 |
郵件的大小。請注意,由於內文一般會是郵件的截斷版本,因此這會和郵件內文的大小不同。 |
uidValidity |
MQInt32 |
IMAP uid 有效性特性。 |
userid |
ConstMQString |
與郵件相關的使用者 ID。 |
訂閱者解析郵件參照時,應允許未加以說明的特性。這可在未來新增特性時允許相容。
newflags 和 oldflags 特性是 5 個字元的字串。此字串必須有以下值:
如果設定了 /answered 旗標,第一個字元為 "A"。如果未設定,則為空白 (「 」)。
如果設定了 /flagged 旗標,第二個字元為 "F"。如果未設定,則為空白 (「 」)。
如果設定了 /deleted 旗標,第三個字元為 "D"。如果未設定,則為空白 (「 」)。
如果設定了 /seen 旗標,第四個字元為 "S"。如果未設定,則為空白 (「 」)。
如果設定了 /draft 旗標,第五個字元為 "R"。如果未設定,則為空白 (「 」)。
表 22–5 顯示與各封通知郵件相關的特性。
例如,若要檢視套用到 TrashMsg 郵件的特性,請參閱欄標頭「ReadMsg、TrashMsg」。TrashMsg 郵件在標準特性之外,可使用 mailboxName、numMsgs、uidValidity、numSeen 和 numDeleted。
表 22–5 各封通知郵件具有的特性
特性 |
NewMsg、UpdateMsg |
ReadMsg、TrashMsg |
DeleteMsg、PurgeMsg |
MsgFlags
|
Login、Logout |
OverQuota、UnderQuota |
---|---|---|---|---|---|---|
client |
否 |
否 |
否 |
否 |
是 |
否 |
diskquota |
否 |
否 |
否 |
否 |
否 |
是 |
diskquotaused |
否 |
否 |
否 |
否 |
否 |
是 |
hdrLen |
是 |
否 |
否 |
是 |
否 |
否 |
hostname |
是 |
是 |
是 |
是 |
是 |
是 |
imapUid |
是 |
否 |
是 |
是 |
否 |
否 |
lastUid |
否 |
否 |
是 |
否 |
否 |
否 |
mailboxName |
是 |
是 |
是 |
是 |
否 |
否 |
msgquota |
否 |
否 |
否 |
否 |
否 |
是 |
newflags |
否 |
否 |
否 |
是 |
否 |
否 |
numDeleted |
是 |
是 |
是 |
否 |
否 |
否 |
numDeletedn |
是* |
是* |
是* |
否 |
否 |
否 |
numMsgs |
是 |
是 |
是 |
否 |
否 |
是 |
numMsgsn |
是* |
是* |
是* |
否 |
否 |
否 |
numSeen |
是 |
是 |
是 |
否 |
否 |
否 |
numSeenn |
是* |
是* |
是* |
否 |
否 |
否 |
numSeenDeleted |
是 |
是 |
是 |
否 |
否 |
否 |
numSeenDeletedn |
是* |
是* |
是* |
否 |
否 |
否 |
oldflags |
否 |
否 |
否 |
是 |
否 |
否 |
Owner |
否 |
是 |
否 |
否 |
否 |
否 |
pid |
是 |
是 |
是 |
是 |
是 |
是 |
process |
是 |
是 |
是 |
是 |
是 |
是 |
quotaRoot |
否 |
否 |
否 |
否 |
否 |
是 |
size |
是 |
否 |
否 |
否 |
否 |
否 |
timestamp |
是 |
是 |
是 |
是 |
是 |
是 |
uidValidity |
是 |
是 |
是 |
是 |
否 |
否 |
userid |
否 |
是 |
否 |
否 |
是 |
是 |
* 僅在郵件儲存中定義郵件類型時,通知才會具有 numDeletedn、numMsgs n、numSeenn 和 numSeenDeletedn 特性。