IMAPIFolder::SetReadFlags

适用于:Outlook 2013 | Outlook 2016

设置或清除 PR_MESSAGE_FLAGS (PidTagMessageFlags) 一个或多个文件夹的邮件属性中的MSGFLAG_READ标志,并管理读取报告的发送。

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:允许 SetReadFlag 成功 返回,可能是在操作完成之前。

  • 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 还管理读取报表的发送。

无法针对以下情况更改读取标志:

  • 不存在的消息。

  • 已移动到其他位置的消息。

  • 以读/写权限打开的消息。

  • 当前提交的消息。

针对实现者的说明

可以决定不支持发送已读报告和取消读取报告的请求。 若要避免禁止显示读取报表,请在调用 setReadFlags 时返回MAPI_E_NO_SUPPRESS,并在 ulFlags 参数中设置了SUPPRESS_RECEIPT。

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 示例代码,请参阅下表。

文件 函数 Comment
FolderDlg.cpp
CFolderDlg::OnSetReadFlag
MFCMAPI 使用 IMAPIFolder::SetReadFlags 方法手动设置指定消息的读取状态。

另请参阅