共用方式為


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 方法手動設定指定訊息的讀取狀態。

另請參閱