IMAPISupport::SpoolerNotify
Aplica-se a: Outlook 2013 | Outlook 2016
Notifica o carretel MAPI de uma alteração no status ou uma solicitação de serviço.
HRESULT SpoolerNotify(
ULONG ulFlags,
LPVOID lpvData
);
Parâmetros
ulFlags
[in] Um bitmask de sinalizadores que indica o tipo de notificação. Os provedores de transporte podem definir todos os sinalizadores, exceto NOTIFY_NEWMAIL_RECEIVED; somente NOTIFY_NEWMAIL_RECEIVED e NOTIFY_READTOSEND são válidos para provedores de repositório de mensagens. Os seguintes sinalizadores são válidos para o parâmetro ulFlags :
NOTIFY_CONFIG_CHANGE
Registra uma solicitação para alterar a configuração do provedor de transporte.
NOTIFY_CRITICAL_ERROR
Ocorreu um erro irrecuperável no provedor de transporte. Como NOTIFY_SENTDEFERRED e NOTIFY_CRITICAL_ERROR usam o parâmetro lpvData para chamadas de provedor de transporte, esses sinalizadores são mutuamente exclusivos.
NOTIFY_CRITSEC
Solicita uma seção crítica para o provedor de transporte. O parâmetro lpvData é indefinido e deve ser NULL.
NOTIFY_NEWMAIL
O carreador MAPI deve baixar as mensagens recém-recebidas no próximo horário disponível. O parâmetro lpvData é indefinido e deve ser definido como NULL.
NOTIFY_NEWMAIL_RECEIVED
Uma nova mensagem foi recebida no repositório de mensagens. O parâmetro lpvData aponta para uma estrutura de NEWMAIL_NOTIFICATION que descreve a mensagem. Esse sinalizador é usado para provedores de repositório de mensagens que são fortemente associados aos provedores de transporte e são ignorados se o provedor da loja estiver conectado com o conjunto de sinalizadores MAPI_NO_MAIL.
NOTIFY_NONCRIT
Libera uma seção crítica obtida com uma chamada anterior para SpoolerNotify com ulFlags definido como NOTIFY_CRITSEC. O parâmetro lpvData é indefinido e deve ser definido como NULL.
NOTIFY_READYTOSEND
O provedor de transporte ou repositório de mensagens está pronto para enviar mensagens. O parâmetro lpvData é indefinido e deve ser definido como NULL.
NOTIFY_SENTDEFERRED
Agora, uma mensagem adiada anteriormente deve ser enviada e o provedor de transporte deve ser notificado quando a mensagem estiver pronta para ser entregue usando uma chamada para o método IXPLogon::SubmitMessage . O identificador de entrada da mensagem adiada está contido em uma estrutura SBinary apontada por lpvData. Como NOTIFY_SENTDEFERRED e NOTIFY_CRITICAL_ERROR usam o parâmetro lpvData , esses sinalizadores são mutuamente exclusivos.
lpvData
[in] Um ponteiro para dados associados aplicáveis a uma notificação. O parâmetro lpvData aponta para dados válidos somente quando os sinalizadores a seguir são definidos (lpvData é NULL quando ulFlags é definido como os outros tipos de notificação):
configuração ulFlags | Valor lpvData |
---|---|
NOTIFY_CRITICAL_ERROR |
Informações sobre o erro. |
NOTIFY_NEWMAIL_RECEIVED |
Uma estrutura NEWMAIL_NOTIFICATION que contém informações sobre a mensagem recém-entregue. |
NOTIFY_SENTDEFERRED |
Uma estrutura SBinary que contém o identificador de entrada da mensagem adiada. |
Valor de retorno
S_OK
A notificação foi bem-sucedida.
Comentários
O método IMAPISupport::SpoolerNotify é implementado para objetos de suporte do repositório de mensagens e do provedor de transporte. Esses provedores chamam spoolerNotify para notificar o spooler MAPI de uma alteração no status ou uma solicitação de serviço. O SpoolerNotify é chamado principalmente por provedores de transporte e pode ser chamado a qualquer momento durante a sessão.
Anotações para provedores de transporte
Se você tiver alterado a configuração do provedor de transporte, chame SpoolerNotify e defina ulFlags como NOTIFY_CONFIG_CHANGED. SpoolerNotify responde chamando o método IXPLogon::AddressTypes para consultar uma alteração nos tipos de endereço com suporte.
Se você precisar de uma seção crítica para garantir o processamento ininterrupto, chame SpoolerNotify com ulFlags definido como NOTIFY_CRITSEC. Definir esse sinalizador informa ao spooler MAPI que ele não deve chamar os métodos IXPLogon::Idle e IXPLogon::P oll . Embora você tenha uma seção crítica aberta, retorne MAPI_E_BUSY sempre que o método IMAPIStatus::ValidateState for chamado. Quando terminar a seção crítica, faça outra chamada para SpoolerNotify with_ulFlags_ definida como NOTIFY_NONCRIT.
Por exemplo, se o provedor de transporte remoto estiver em processo de carregamento de mensagens, talvez seja necessário permitir que um usuário insira um número de telefone para estabelecer a conexão remota. Antes de fazer loop pelo procedimento da caixa de diálogo, você deve declarar uma seção crítica. Quando o usuário fecha a caixa de diálogo, encerrando o procedimento da caixa de diálogo, você deve liberar a seção crítica.
Quando você define ulFlags como NOTIFY_CRITICAL_ERROR, o spooler MAPI não faz mais chamadas para o provedor, exceto para liberá-lo. Se você chamar spoolerNotify com NOTIFY_CRITICAL_ERROR definido nos métodos IXPLogon::StartMessage ou IXPLogon::SubmitMessage , retorne com um valor de erro apropriado da chamada StartMessage ou SubmitMessage imediatamente após a chamada SpoolerNotify .
Se o provedor de transporte se recuperou de uma condição que anteriormente o fez falhar, chame SpoolerNotify com ulFlags definido como NOTIFY_READYTOSEND. Esse sinalizador indica que o provedor está novamente pronto para lidar com mensagens.
Anotações para provedores do Repositório de Mensagens
Chame SpoolerNotify, passando o sinalizador NOTIFY_READYTOSEND em ulFlags, antes de fazer sua primeira chamada para IMAPISupport::P repareSubmit em IMessage::SubmitMessage. Essa chamada para SpoolerNotify precisa ser feita apenas uma vez por sessão.
Se o provedor do repositório de mensagens estiver fortemente associado a um provedor de transporte e você chamar SpoolerNotify com ulFlags definido como NOTIFY_NEWMAIL_RECEIVED, o spooler MAPI abrirá a nova mensagem e começará a processar a nova função de gancho de mensagem. Quando o processamento é concluído, o spooler MAPI chama o método IMsgStore::NotifyNewMail para informá-lo de sua própria nova mensagem.
Para obter mais informações sobre como chamar spoolerNotify, confira qualquer um dos seguintes tópicos:
Confira também
IMsgStore::NotifyNewMail
IXPLogon::StartMessage
IXPLogon::SubmitMessage
IMAPISupport: IUnknown