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


Модель приема сообщений

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

Поставщик транспорта определяет, должен ли диспетчер очереди MAPI опрашивать его на наличие входящей почты или же он выполняет обратный вызов диспетчеру очереди MAPI при поступлении новой почты. Поставщик транспорта задает флаг SP_LOGON_POLL при возврате из IXPProvider::TransportLogon для запроса опроса. В противном случае поставщик транспорта использует IMAPISupport::SpoolerNotify , когда доступна входящая почта. Узнав, что входящая почта доступна, диспетчер очереди MAPI открывает новое сообщение и просит поставщика транспорта сохранить в сообщении свойства полученного сообщения.

Этот процесс работает следующим образом:

  1. Доступные сообщения указываются поставщиком транспорта, вызывающим IMAPISupport::SpoolerNotify , или диспетчером spooler MAPI, вызывающим IXPLogon::P oll.

  2. Диспетчер очереди MAPI вызывает IXPLogon::StartMessage для запуска процесса.

  3. Поставщик транспорта помещает ссылочные значения в расположение, на которое ссылается startMessage. Эти ссылочные значения позволяют поставщику транспорта и диспетчеру очереди MAPI отслеживать, какое сообщение обрабатывается при наличии нескольких сообщений для доставки.

  4. Поставщик транспорта сохраняет данные сообщения в переданный экземпляр IMessage : IMAPIProp .

  5. Поставщик транспорта вызывает метод IMAPIProp::SaveChanges для экземпляра IMessage и возвращает из StartMessage.

  6. Диспетчер очереди MAPI вызывает IXPLogon::TransportNotify , если он должен остановить доставку сообщений.

Примечание.

Если поставщик транспорта должен доставить большое количество сообщений и поставщик транспорта использует IMAPISupport::SpoolerNotify вместо IXPLogon::P oll, следует соблюдать осторожность, чтобы не вызывать SpoolerNotify слишком часто, чтобы не лишить других поставщиков транспорта времени ЦП. Диспетчер очереди MAPI имеет логику, чтобы предотвратить это, но в целом интервал между вызовами SpoolerNotify должен быть больше, чем время, затрачиваемое поставщиком транспорта на обработку одного сообщения. > Кроме того, диспетчер очереди MAPI может не обрабатывать входящее сообщение немедленно. Диспетчер очереди MAPI может попросить поставщика транспорта выполнить другие задачи, прежде чем он получит входящее сообщение.