IMAPIFolder::SetReadFlags
適用於:Outlook 2013 |Outlook 2016
設定或清除PR_MESSAGE_FLAGS中MSGFLAG_READ旗標 (PidTagMessageFlags) 一或多個資料夾訊息的屬性,並管理讀取報表的傳送。
HRESULT SetReadFlags(
LPENTRYLIST lpMsgList,
ULONG_PTR ulUIParam,
LPMAPIPROGRESS lpProgress,
ULONG ulFlags
);
參數
lpMsgList
[in] ENTRYLIST 結構陣列的指標,識別具有要設定或清除之讀取旗標的訊息。 如果 lpMsgList 設定為 NULL,則會設定或清除所有資料夾訊息的讀取旗標。
ulUIParam
[in]進度指示器之父視窗的句柄。 除非在ulFlags參數中設定MESSAGE_DIALOG旗標,否則會忽略ulUIParam參數。
lpProgress
[in]顯示進度指標之進度物件的指標。 如果在 lpProgress 中傳遞 NULL,訊息存放區提供者會使用 MAPI 的實作來顯示進度指示器。 除非在ulFlags中設定MESSAGE_DIALOG旗標,否則會忽略 lpProgress 參數。
ulFlags
[in]旗標的位掩碼,控制訊息讀取旗標的設定和讀取報表的處理。 您可以設定下列旗標:
CLEAR_READ_FLAG:應該在PR_MESSAGE_FLAGS中清除 MSGFLAG_READ 旗標,而且不應該傳送讀取報表。
CLEAR_NRN_PENDING:應該在PR_MESSAGE_FLAGS中清除 MSGFLAG_NRN_PENDING 旗標,而且不應該傳送未讀取的報表。
CLEAR_RN_PENDING:應該在PR_MESSAGE_FLAGS中清除 MSGFLAG_RN_PENDING 旗標,而且不應該傳送讀取報表。
GENERATE_RECEIPT_ONLY:如果讀取報表暫止,則應該傳送讀取報表,但MSGFLAG_READ旗標的狀態應該不會有任何變更。
MAPI_DEFERRED_ERRORS:允許 SetReadFlags 成功傳回,可能在作業完成之前。
MESSAGE_DIALOG:作業繼續時顯示進度指示器。
SUPPRESS_RECEIPT:如果已要求讀取報表,而且此呼叫將訊息的狀態從未讀取變更為讀取,則應該取消暫止的讀取報表。 如果此呼叫不會變更訊息的狀態,訊息存放區提供者可以忽略此旗標。
傳回值
S_OK
已成功設定或清除指定訊息的讀取旗標。
MAPI_E_NO_SUPPRESS
訊息存放區提供者不支援隱藏讀取報表。
MAPI_E_INVALID_PARAMETER
下列其中一個不相容的旗標組合是在 ulFlags 參數中設定:
SUPPRESS_RECEIPT |CLEAR_READ_FLAG
SUPPRESS_RECEIPT |CLEAR_READ_FLAG |GENERATE_RECEIPT_ONLY
CLEAR_READ_FLAG |GENERATE_RECEIPT_ONLY
MAPI_W_PARTIAL_COMPLETION
呼叫成功,但並非所有訊息都已成功處理。 傳回此警告時,應將呼叫視為成功處理。 若要測試此警告,請使用 HR_FAILED 宏。 如需詳細資訊,請 參閱使用宏進行錯誤處理。
註解
IMAPIFolder::SetReadFlags 方法會設定或清除一或多個資料夾訊息PR_MESSAGE_FLAGS屬性中的MSGFLAG_READ旗標。 設定MSGFLAG_READ旗標會將訊息標示為已讀取,不一定表示預定的收件者已實際讀取郵件。
SetReadFlags 也會管理讀取報表的傳送。
下列項目無法變更讀取旗標:
不存在的訊息。
已移至其他位置的訊息。
以讀取/寫入許可權開啟的訊息。
目前提交的訊息。
實作者注意事項
您可以決定不支援傳送讀取報表,以及隱藏讀取報表的要求。 若要避免隱藏讀取報表,請在使用 ulFlags 參數中設定的 SUPPRESS_RECEIPT 呼叫 SetReadFlags 時傳回 MAPI_E_NO_SUPPRESS。
當 lpMsgList 參數指向多個訊息時,請盡可能針對每個訊息完整執行作業。 除非發生超出您控制的失敗,例如記憶體不足、磁碟空間不足或訊息存放區損毀,否則請勿提前停止作業。
如果 ulFlags 參數中未設定任何旗標,則適用下列規則:
如果MSGFLAG_READ已設定,則不執行任何動作。
如果未設定MSGFLAG_READ,請立即加以設定,並在設定 PR_READ_RECEIPT_REQUESTED (PidTagReadReceiptRequested) 屬性時傳送任何暫止的讀取報表。
設定SUPPRESS_RECEIPT旗標時,會套用下列規則:
如果MSGFLAG_READ已設定,則不執行任何動作。
如果未設定MSGFLAG_READ,請加以設定並取消任何擱置的讀取報表。
設定CLEAR_READ_FLAG旗標時,請清除每個訊息PR_MESSAGE_FLAGS屬性中的 MSGFLAG_READ 旗標,而不會傳送任何讀取報表。
設定GENERATE_RECEIPT_ONLY旗標時,傳送任何暫止的讀取報表。 請勿設定或清除MSGFLAG_READ。
設定SUPPRESS_RECEIPT和GENERATE_RECEIPT_ONLY旗標時,如果已設定,請將 PR_READ_RECEIPT_REQUESTED 設為 FALSE,而且不會傳送讀取報表。
呼叫者注意事項
在下列情況下,預期這些傳回值。
Condition | 傳回值 |
---|---|
SetReadFlags 已成功處理每個訊息。 | S_OK |
SetReadFlags 無法成功處理每則訊息。 | MAPI_W_PARTIAL_COMPLETION或MAPI_E_NOT_FOUND |
SetReadFlags 無法完成。 | MAPI_E_NOT_FOUND以外的任何錯誤值 |
當 SetReadFlags 無法完成時,請勿假設未完成任何工作。 SetReadFlags 可能已經能夠在遇到錯誤之前,為一或多個訊息設定或清除MSGFLAG_READ旗標。
MFCMAPI 參考
如需 MFCMAPI 範例程式代碼,請參閱下表。
檔案 | Function | Comment |
---|---|---|
FolderDlg.cpp |
CFolderDlg::OnSetReadFlag |
MFCMAPI 使用 IMAPIFolder::SetReadFlags 方法手動設定指定訊息的讀取狀態。 |