Поделиться через


IMAPIFolder::SetReadFlags

Область применения: Outlook 2013 | Outlook 2016

Задает или очищает флаг MSGFLAG_READ в свойстве PR_MESSAGE_FLAGS (PidTagMessageFlags) одного или нескольких сообщений папки и управляет отправкой отчетов о прочтении.

HRESULT SetReadFlags(
  LPENTRYLIST lpMsgList,
  ULONG_PTR ulUIParam,
  LPMAPIPROGRESS lpProgress,
  ULONG ulFlags
);

Параметры

lpMsgList

[в] Указатель на массив структур ENTRYLIST , которые идентифицируют сообщение или сообщения с флагами чтения для установки или очистки. Если для lpMsgList задано значение NULL, флаги чтения для всех сообщений папки устанавливаются или очищаются.

ulUIParam

[в] Дескриптор родительского окна индикатора хода выполнения. Параметр ulUIParam игнорируется, если в параметре ulFlags не установлен флаг MESSAGE_DIALOG.

lpProgress

[в] Указатель на объект выполнения, отображающий индикатор хода выполнения. Если в lpProgress передается значение NULL, поставщик хранилища сообщений отображает индикатор хода выполнения с помощью реализации MAPI. Параметр lpProgress игнорируется, если флаг MESSAGE_DIALOG не установлен в ulFlags.

ulFlags

[в] Битовая маска флагов, управляющая настройкой флага чтения сообщения и обработкой отчетов о прочтении. Можно задать следующие флаги:

  • CLEAR_READ_FLAG. Флаг MSGFLAG_READ должен быть снят в PR_MESSAGE_FLAGS , а отчет для чтения не должен отправляться.

  • CLEAR_NRN_PENDING: флаг MSGFLAG_NRN_PENDING должен быть снят в PR_MESSAGE_FLAGS и не следует отправлять непрочитанные отчеты.

  • CLEAR_RN_PENDING. Флаг MSGFLAG_RN_PENDING должен быть очищен в PR_MESSAGE_FLAGS , и отчет о прочтении не должен отправляться.

  • 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 задает или очищает флаг MSGFLAG_READ в свойстве PR_MESSAGE_FLAGS одного или нескольких сообщений папки. Установка флага MSGFLAG_READ помечает сообщение как прочитанное, что не обязательно указывает на то, что предполагаемый получатель действительно прочитал сообщение.

SetReadFlags также управляет отправкой отчетов о чтении.

Флаг чтения нельзя изменить для следующих элементов:

  • Сообщения, которые не существуют.

  • Сообщения, которые были перемещены в другое место.

  • Сообщения, открытые с разрешением на чтение и запись.

  • Отправленные в настоящее время сообщения.

Примечания для исполнителей

Вы можете не поддерживать отправку отчетов о чтении и запрос на подавление отчетов чтения. Чтобы избежать подавления прочитанного отчета, верните MAPI_E_NO_SUPPRESS при вызове SetReadFlags с SUPPRESS_RECEIPT задано в параметре ulFlags .

Если параметр lpMsgList указывает на несколько сообщений, выполните операцию максимально полно для каждого сообщения. Не прерывайте операцию преждевременно, если не произойдет сбой, не зависящий от вас, например нехватки памяти, нехватки дискового пространства или повреждения в хранилище сообщений.

Если ни один из флагов не задан в параметре ulFlags , применяются следующие правила:

  • Если MSGFLAG_READ уже задано, ничего не делать.

  • Если MSGFLAG_READ не задано, немедленно задайте его и отправьте все ожидающие отчеты о чтении , если задано свойство PR_READ_RECEIPT_REQUESTED (PidTagReadReceiptRequested).

Если установлен флаг SUPPRESS_RECEIPT, применяются следующие правила:

  • Если MSGFLAG_READ уже задано, ничего не делать.

  • Если MSGFLAG_READ не задано, задайте его и отмените все ожидающие чтение отчеты.

Когда флаг CLEAR_READ_FLAG установлен, снимите флаг MSGFLAG_READ в свойстве PR_MESSAGE_FLAGS каждого сообщения и не отправляйте отчеты о прочтении.

Если флаг 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 , чтобы вручную задать состояние чтения для указанных сообщений.

См. также