處理訊息存放區通知
適用於:Outlook 2013 |Outlook 2016
若要註冊訊息存放區通知,請呼叫 IMAPISession::Advise 或 IMsgStore::Advise 方法,並在 lpEntryID 參數的內容中指定訊息存放區、資料夾或訊息專案標識符。 訊息存放區提供者同時支援對象和數據表通知。 無論您向特定訊息存放區物件註冊、使用描述這些對象的資料夾階層和內容數據表,或使用物件和數據表,都取決於您預期會看到的通知、您執行作業的呼叫,以及訊息存放區提供者如何支援通知。
因為MAPI允許提供者支援通知的彈性,所以請注意,您不一定會收到相同類型的通知,以回應來自所有訊息存放區提供者的特定事件。 某些訊息存放區提供者完全不支援通知。 若要判斷您使用的訊息存放區是否支援通知,請在 PidTagStoreSupportMask) 屬性 (PR_STORE_SUPPORT_MASK 中尋找STORE_NOTIFY_OK位。
支援通知的訊息存放區提供者的一端是產生「豐富」通知的提供者;這些提供者會針對所有已註冊的建議來源傳送描述性通知。 另一端是支援有限通知的訊息存放區提供者;這些提供者會針對有限數量的建議來源傳送一般通知。
例如,如果您將訊息複製到已註冊以接收複製對象和物件移動通知的資料夾,您可能會或可能不會收到複製的物件通知。 您是否收到它取決於:
您呼叫來執行複本的方法。 這可能是 IMAPIFolder::CopyMessages、 IMAPIProp::CopyTo 或 IMAPIProp::CopyProps。
訊息存放區提供者如何實作複製方法。
訊息存放區提供者是否支援在資料夾上複製物件的通知。
因為沒有描述如何實作訊息存放區提供者事件通知的嚴格指導方針,所以客戶端無法預期一致的行為。 MAPI 會針對訊息存放區提供者如何實作事件通知提出建議,下表概述這些建議。 如下所示讀取數據表:在第一個數據行中執行作業之後,如果您已使用第三個數據行中所列的物件註冊該類型,則預期會收到第二個數據行中所列類型的通知。 例如,建立資料夾之後,只有當您向訊息存放區註冊 fnevObjectCreated 通知時,才會收到 fnevObjectCreated 通知。
作業 | 事件類型 | 建議來源 |
---|---|---|
建立資料夾 |
fnevObjectCreated |
訊息存放區 |
刪除資料夾 |
fnevObjectDeleted |
郵件存放區已刪除的資料夾 |
將資料夾從一個資料夾移到另一個資料夾 |
fnevObjectMoved |
郵件存放區已移動資料夾 |
將資料夾從一個資料夾複製到另一個資料夾 |
fnevObjectCopied |
訊息存放區和複製的資料夾 (未針對新資料夾複本傳送 任何 fnevObjectCreated 通知) |
在 PidTagSubfolders) 、PR_CONTENT_UNREAD (PidTagContentUnreadCount) 、PR_SUBFOLDERS (PidTagContentCount) 、PR_CONTENT_COUNT (PidTagContentCount) (計算資料夾屬性的變更 |
fnevObjectModified |
訊息存放區 已變更資料夾 (沒有通知給父資料夾) |
建立訊息 |
fnevObjectCreated |
訊息存放區 |
刪除訊息,導致父資料夾的 PR_CONTENT_COUNT 屬性變更 |
fnevObjectDeleted |
郵件存放區已刪除的訊息 |
將訊息從一個資料夾移至另一個資料夾 |
fnevObjectMoved |
訊息存放區已移動訊息 |
將訊息從一個資料夾複製到另一個資料夾 |
fnevObjectCopied |
訊息存放區複製的訊息 (訊息新複本沒有 fnevObjectCreated 通知) |
儲存訊息,導致父資料夾的 PR_CONTENT_COUNT 屬性變更 |
fnevObjectCreated |
僅在第一次儲存時儲存訊息 |
儲存訊息 |
fnevObjectModified |
第一次儲存後儲存的訊息儲存已變更訊息 (沒有通知給父資料夾) |
完成搜尋作業 |
fnevSearchComplete |
訊息存放區搜尋資料夾 |
新訊息 |
fnevNewMail |
訊息存放區 |
注意事項
當您收到物件修改通知時,請記住,OnNotify 呼叫中 lpNotifications 參數所指向之OBJECT_NOTIFICATION結構的屬性標記數位部分,不一定為 NULL。 訊息存放區提供者不需要在此數位中插入屬性資訊,大部分則不需要。 請確定您的 OnNotify 方法可以處理 lpPropTagArray 指標為 NULL 的情況。
對大部分而言,如果不是所有物件通知,請更新受影響資料夾或資料夾的檢視。