本節說明以下主題:
您可以為郵件儲存中發生的各種事件產生通知郵件。例如,當使用者登入時,會產生一封 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 特性。