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


IXPLogon::TransportNotify

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

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

HRESULT TransportNotify(
  ULONG FAR * lpulFlags,
  LPVOID FAR * lppvData
);

Параметры

lpulFlags

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

NOTIFY_ABORT_DEFERRED

Уведомляет поставщика транспорта о том, что сообщение, за которое он взял на себя ответственность, откладывается. Только поставщики транспорта, поддерживающие отсрочку, должны поддерживать этот флаг. Параметр lppvData указывает на идентификатор записи отмененного сообщения. Сообщения, не обработанные диспетчером очереди MAPI, по-прежнему можно отложить, вызвав метод IMsgStore::AbortSubmit .

NOTIFY_BEGIN_INBOUND

Диспетчер очереди MAPI теперь может принимать входящие сообщения для этого сеанса поставщика транспорта. Диспетчер очереди MAPI регулярно вызывает метод IXPLogon::P oll, если поставщик транспорта задает флаг LOGON_SP_POLL с вызовом IXPProvider::TransportLogon при входе в систему. После установки флага NOTIFY_BEGIN_INBOUND диспетчер очереди MAPI учитывает флаг NOTIFY_NEWMAIL, переданный в вызове метода IMAPISupport::SpoolerNotify . Перед возвратом необходимо обновить строку таблицы состояния для сеанса поставщика транспорта, вызвав метод IMAPISupport::ModifyStatusRow . Флаги NOTIFY_BEGIN_INBOUND и NOTIFY_END_INBOUND являются взаимоисключающими.

NOTIFY_BEGIN_INBOUND_FLUSH

Указывает поставщику транспорта на максимально быстрое прохождение входящих сообщений. В соответствии с этим уведомлением поставщик транспорта должен задать флаг STATUS_INBOUND_FLUSH в свойстве PR_STATUS_CODE (PidTagStatusCode) строки таблицы состояния как можно скорее с помощью ModifyStatusRow. Цикл входящего обмена сообщениями завершается, когда поставщик определяет, что загрузил все, что он может, или когда он получил вызов метода TransportNotify с установленным флагом NOTIFY_END_INBOUND_FLUSH. До конца цикла входящего обмена сообщениями поставщик не должен вызывать метод IMAPISupport::SpoolerYield или иным образом отказываться от циклов операционной системы для ускорения доставки входящих сообщений. Это допустимо, так как диспетчер очереди MAPI обычно использует NOTIFY_BEGIN_INBOUND_FLUSH только в ответ на запрос пользователя через клиентское приложение для доставки всех сообщений. В конце операции входящего сброса поставщик должен использовать SpoolerNotify для очистки флага STATUS_INBOUND_FLUSH в свойстве PR_STATUS_CODE строки состояния.

NOTIFY_BEGIN_OUTBOUND

Исходящие операции теперь могут выполняться для этого сеанса поставщика транспорта. Если для этого поставщика необходимо отправить какие-либо сообщения, следует вызвать метод IXPLogon::SubmitMessage . Перед возвратом необходимо обновить строку таблицы состояния для этого сеанса. Флаги NOTIFY_BEGIN_OUTBOUND и NOTIFY_END_OUTBOUND являются взаимоисключающими.

NOTIFY_BEGIN_OUTBOUND_FLUSH

Работает аналогично флагу NOTIFY_BEGIN_INBOUND_FLUSH, но ссылается на исходящие сообщения. Соответствующий флаг состояния STATUS_OUTBOUND_FLUSH.

NOTIFY_CANCEL_MESSAGE

Диспетчер очереди MAPI должен отменить передачу сообщения, для которого параметр lppvData указывает на 32-разрядное значение из вызова метода IXPLogon::SubmitMessage . Флаг NOTIFY_CANCEL_MESSAGE можно задать без возврата поставщика транспорта из вызова метода SubmitMessage, IXPLogon::StartMessage или IXPLogon::EndMessage , связанного с сообщением. Поставщик транспорта должен вернуться как можно скорее из точки входа, обрабатывающей сообщение об отмене. Для входящего сообщения, которое в настоящее время обрабатывается, поставщик транспорта должен сохранить входящее сообщение, где бы оно ни хранилось в настоящее время, и доставить его снова в следующее удобное время. Данные объекта сообщения, хранящиеся для входящего сообщения, удаляются. Если поставщик транспорта не обновил это 32-разрядное значение во время StartMessage или SubmitMessage , значение равно 0 для исходящих сообщений и 1 для входящих сообщений.

NOTIFY_END_INBOUND

Входящие операции должны быть прекращены для этого сеанса поставщика транспорта. Диспетчер очереди MAPI перестает использовать метод Poll и игнорирует NOTIFY_NEWMAIL для этого сеанса. Внутрипроцессные сообщения должны быть завершены. Строку таблицы состояния для сеанса транспорта следует обновить, вызвав ModifyStatusRow перед возвратом. Флаги NOTIFY_END_INBOUND и NOTIFY_BEGIN_INBOUND являются взаимоисключающими.

NOTIFY_END_INBOUND_FLUSH

Уведомляет поставщика транспорта о выходе из режима входящего потока. Поставщик транспорта не должен прекращать скачивание, но скачивание должно выполняться в фоновом режиме. Строка таблицы состояния для сеанса транспорта должна быть обновлена путем вызова ModifyStatusRow , если поставщик транспорта может соответствовать этому уведомлению.

NOTIFY_END_OUTBOUND

Исходящие операции должны быть прекращены для этого сеанса поставщика транспорта. Диспетчер очереди MAPI перестает вызывать SubmitMessage и игнорирует флаг spoolerNotify NOTIFY_READYTOSEND. Если в настоящее время отправляется исходящее сообщение, его не следует останавливать. Чтобы остановить доставку сообщения, используйте флаг NOTIFY_CANCEL_MESSAGE. Строка таблицы состояния для этого сеанса должна быть обновлена путем вызова ModifyStatusRow перед возвратом. Флаги NOTIFY_END_INBOUND и NOTIFY_BEGIN_OUTBOUND являются взаимоисключающими.

NOTIFY_END_OUTBOUND_FLUSH

Работает аналогично NOTIFY_END_INBOUND_FLUSH, но ссылается на исходящие сообщения. Соответствующий флаг состояния STATUS_OUTBOUND_FLUSH.

lppvData

[out] Указатель на указатель на данные, относящиеся к событию. Дополнительные сведения о том, что указывает lppvData , см. в описании параметра lpulFlags .

Возвращаемое значение

S_OK

Вызов выполнен успешно и возвращает ожидаемое значение или значения.

Замечания

Диспетчер очереди MAPI вызывает метод IXPLogon::TransportNotify , чтобы сообщить поставщику транспорта о событиях, для которых было запрошено уведомление. Эти события включают запрос диспетчера очереди MAPI для отмены передачи сообщений, начало или окончание операций входящего или исходящего транспорта, а также начало или окончание операции очистки очереди входящих или исходящих сообщений.

Когда пользователь пытается отменить сообщение, отложенное поставщиком транспорта, диспетчер очереди MAPI вызывает TransportNotify, передав флаги NOTIFY_ABORT_DEFERRED и NOTIFY_CANCEL_MESSAGE в ulFlags. Если диспетчер очереди MAPI отключается и по-прежнему содержит сообщения в очереди, он передает только NOTIFY_ABORT_DEFERRED в ulFlags при вызовеTransportNotify.

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

Поставщик должен синхронизировать доступ к своим данным при этом вызове, так как диспетчер очереди MAPI может вызывать этот метод из другого потока выполнения или из процедуры для другого окна. Скорее всего, это произойдет, когда диспетчер очереди MAPI сигнализирует об отмене сообщения, которое поставщик транспорта начал отправлять.

См. также