Função de retorno de chamada MAPISENDMAILW (mapi.h)

Envia uma mensagem Unicode. Essa função substitui a função ANSI MAPISendMail.

No Windows 7 e anteriores: Instale o Microsoft Windows Software Development Kit (SDK) para Windows 8 e use MAPISendMailHelper para enviar uma mensagem.

Todas as informações se aplicam a MAPISendMailW e MAPISendMail , a menos que seja especificado de outra forma.

Sintaxe

MAPISENDMAILW Mapisendmailw;

ULONG Mapisendmailw(
  [in] LHANDLE lhSession,
  [in] ULONG_PTR ulUIParam,
  [in] lpMapiMessageW lpMessage,
  [in] FLAGS flFlags,
       ULONG ulReserved
)
{...}

Parâmetros

[in] lhSession

Tipo: LHANDLE

Manipule para uma sessão MAPI simples ou zero.

Se o valor do parâmetro lhSession for zero, MAPI faz logon no usuário e cria uma sessão que existe apenas durante a chamada. Essa sessão temporária pode ser uma sessão compartilhada existente ou uma nova. Se necessário, a caixa de diálogo de logon será exibida.

[in] ulUIParam

Tipo: ULONG_PTR

Identificador de janela pai ou zero.

Se o parâmetro ulUIParam contiver o identificador de janela pai, o identificador será do tipo HWND (convertido em um ULONG_PTR).

Se nenhuma caixa de diálogo for exibida durante a chamada, ulUIParam será ignorado.

[in] lpMessage

Tipo: lpMapiMessageW

Ponteiro para uma estrutura MAPISendMailW que contém a mensagem a ser enviada.

Nota Para a função MAPISendMail , esse parâmetro aponta para uma estrutura MapiMessage .
 
Ao chamar a função, observe as seguintes informações sobre membros da estrutura de mensagens:
Membro Observações
lpFiles Defina esse membro como NULL quando a mensagem não tiver anexos de arquivo.
lpszMessageType Usado por aplicativos que não lidam com mensagens interpessoais. Se o aplicativo manipular mensagens interpessoais, defina o membro lpszMessageType como NULL ou defina-o para apontar para uma cadeia de caracteres vazia.
lpszSubject Um valor nulo significa que não há texto para o assunto da mensagem.
lpszNoteText Um valor nulo significa que não há texto no corpo da mensagem.
lpRecips Um valor nulo significa que não há destinatários. Além disso, quando esse membro é NULL, o membro nRecipCount deve ser zero.
nRecipCount Um valor zero significa que não há destinatários. Além disso, quando esse membro é zero, o membro lpRecips deve ser NULL.
 
Ponta Ao chamar a função e não houver destinatários, você deve definir o sinalizador MAPI_DIALOG ou o sinalizador MAPI_DIALOG_MODELESS para solicitar informações do destinatário ao usuário.
 
Se MAPI_DIALOG ou MAPI_DIALOG_MODELESS não estiver definido, os membros nRecipCount e lpRecips da estrutura deverão ser válidos para entrega bem-sucedida de mensagens. Os aplicativos cliente podem definir o membro flFlags como MAPI_RECEIPT_REQUESTED para solicitar um relatório de leitura.

Para obter mais detalhes sobre como a função lida com informações do destinatário, consulte Manipulando informações do destinatário em Comentários.

[in] flFlags

Tipo: FLAGS

Máscara de bits de sinalizadores de opção. Os sinalizadores a seguir podem ser definidos.

Valor Significado
MAPI_DIALOG
0x00000008
Uma caixa de diálogo modal do aplicativo deve ser exibida para solicitar ao usuário destinatários e outras opções de envio.

Se nem MAPI_DIALOG nem MAPI_DIALOG_MODELESS estiver definido, pelo menos um destinatário deverá ser especificado.

MAPI_DIALOG_MODELESS
0x00000004 | MAPI_DIALOG
Disponível no Windows com a próxima versão do Office:

Uma caixa de diálogo de modelagem deve ser exibida para solicitar ao usuário destinatários e outras opções de envio.

Se MAPI_DIALOG_MODELESS estiver definido, o parâmetro lhSession deverá ser definido como zero. Caso contrário, se esse sinalizador estiver definido e lhSession não for zero, o Outlook gerará uma exceção.

Além disso, se MAPI_DIALOG_MODELESS estiver definido, o sistema ignorará o sinalizador MAPI_NEW_SESSION .

Se nem MAPI_DIALOG nem MAPI_DIALOG_MODELESS estiver definido, pelo menos um destinatário deverá ser especificado.

Ponta Para usar esse sinalizador no Windows 7 ou anterior, você deve ter o SDK do Windows para Windows 8 e a próxima versão do Office instalado, e você deve chamar MAPISendMailHelper em vez de MAPISendMailW.
 
MAPI_LOGON_UI
0x00000001
Uma caixa de diálogo deve ser exibida para solicitar que o usuário faça logon, se necessário.

Se o sinalizador MAPI_LOGON_UI não estiver definido, o aplicativo cliente não exibirá uma caixa de diálogo de logon e retornará um valor de erro se o usuário não estiver conectado.

Se o parâmetro lpszMessageID estiver vazio, o sinalizador MAPI_LOGON_UI será ignorado.

MAPI_NEW_SESSION
0x00000002
É feita uma tentativa de criar uma nova sessão em vez de adquirir a sessão compartilhada do ambiente. Se o sinalizador MAPI_NEW_SESSION não estiver definido, a função usará uma sessão compartilhada existente.

Se você definir o sinalizador MAPI_NEW_SESSION (impedindo o uso de uma sessão compartilhada) e o perfil exigir uma senha, você também deverá definir o sinalizador MAPI_LOGON_UI ou a função falhará. Seu aplicativo cliente pode evitar essa falha usando o perfil padrão sem uma senha ou usando um perfil explícito sem uma senha.

MAPI_FORCE_UNICODE
0x00040000
Não converta a mensagem em ANSI se o provedor não der suporte ao Unicode.
Nota Esse sinalizador está disponível apenas para MAPISendMailW .
 

ulReserved

Tipo: ULONG

Reservados; deve ser zero.

Valor retornado

Tipo: ULONG

Essa função retorna um dos valores a seguir.

Valor/código retornado Descrição
MAPI_E_AMBIGUOUS_RECIPIENT
21
Um destinatário correspondeu a mais de uma das estruturas do descritor do destinatário e MAPI_DIALOG não foi definido. Nenhuma mensagem foi enviada.
MAPI_E_ATTACHMENT_NOT_FOUND
11
O anexo especificado não foi encontrado. Nenhuma mensagem foi enviada.
MAPI_E_ATTACHMENT_OPEN_FAILURE
12
Não foi possível abrir o anexo especificado. Nenhuma mensagem foi enviada.
MAPI_E_ATTACHMENT_TOO_LARGE
28
O anexo especificado era muito grande. Nenhuma mensagem foi enviada.
MAPI_E_BAD_RECIPTYPE
15
O tipo de destinatário não foi MAPI_TO, MAPI_CC ou MAPI_BCC. Nenhuma mensagem foi enviada.
MAPI_E_FAILURE
2
Ocorreu um ou mais erros não especificados. Nenhuma mensagem foi enviada.
MAPI_E_INSUFFICIENT_MEMORY
5
Não havia memória suficiente para continuar. Nenhuma mensagem foi enviada.
MAPI_E_INVALID_RECIPS
25
Um ou mais destinatários eram inválidos ou não resolve a nenhum endereço.
MAPI_E_LOGIN_FAILURE
3
Não havia nenhum logon padrão e o usuário não conseguiu fazer logon com êxito quando a caixa de diálogo de logon foi exibida. Nenhuma mensagem foi enviada.
MAPI_E_TEXT_TOO_LARGE
18
O texto na mensagem era muito grande. Nenhuma mensagem foi enviada.
MAPI_E_TOO_MANY_FILES
9
Havia muitos anexos de arquivo. Nenhuma mensagem foi enviada.
MAPI_E_TOO_MANY_RECIPIENTS
10
Havia muitos destinatários. Nenhuma mensagem foi enviada.
MAPI_E_UNICODE_NOT_SUPPORTED
27
O sinalizador MAPI_FORCE_UNICODE é especificado e não há suporte para Unicode.
Nota Esse valor só pode ser retornado por MAPISendMailW .
 
MAPI_E_UNKNOWN_RECIPIENT
14
Um destinatário não apareceu na lista de endereços. Nenhuma mensagem foi enviada.
MAPI_E_USER_ABORT
1
O usuário cancelou uma das caixas de diálogo. Nenhuma mensagem foi enviada.
SUCCESS_SUCCESS
0
A chamada foi bem-sucedida e a mensagem foi enviada.

Comentários

As funções MAPISendMailW (Unicode) e MAPISendMail (ANSI) enviam uma mensagem padrão, com ou sem qualquer interação do usuário. O perfil deve ser configurado para que qualquer função possa abrir os provedores de serviço padrão sem a necessidade de interação do usuário.

Nem MAPISendMailW nem MAPISendMail exigem que um destinatário do tipo originador envie uma mensagem.

Seu aplicativo cliente pode fornecer uma lista completa ou parcial de nomes de destinatário, texto do assunto, anexos de arquivo ou texto da mensagem. Se alguma informação estiver ausente, a função que você chamar ( MAPISendMailW ou MAPISendMail) poderá solicitar ao usuário as informações ausentes.

Se nenhuma informação estiver ausente, a mensagem poderá ser enviada como está ou o usuário poderá ser solicitado a verificar as informações e alterar os valores, se necessário.

Tanto MAPISendMailW quanto MAPISendMail diferem da função MAPISendDocuments , pois permitem maior flexibilidade na geração de mensagens.

Texto da mensagem

Alguns aplicativos cliente podem truncar linhas de assunto que são muito longas ou contêm retornos de carro, feeds de linha ou feeds de formulário.

Cada parágrafo deve ser encerrado com um CR (0x0d), um LF (0x0a) ou um par CRLF (0x0d0a). MapISendMailW e MAPISendMail encapsulam as linhas conforme apropriado.

Se o texto exceder os limites do sistema, a função retornará o valor MAPI_E_TEXT_TOO_LARGE .

Anexos de arquivo

O número de anexos por mensagem pode ser limitado em alguns sistemas de mensagens. Se esse limite for excedido, a função falhará e retornará o valor MAPI_E_TOO_MANY_FILES .

Os anexos de arquivo são copiados para a mensagem antes que a função retorne; portanto, alterações posteriores nos arquivos não afetam o conteúdo da mensagem. Os arquivos devem ser fechados quando são copiados.

Não tente exibir anexos fora do intervalo do texto da mensagem.

Destinatários

Alguns sistemas de mensagens podem limitar o número de destinatários por mensagem. Se o aplicativo cliente passar um valor não NULL indicando um número de destinatários que excedem o limite do sistema, a função falhará e retornará o valor MAPI_E_TOO_MANY_RECIPIENTS .

Se o aplicativo cliente enviar mensagens para um ou mais destinatários personalizados e você quiser evitar resolver os nomes desses destinatários, você deverá especificar o endereço do destinatário personalizado.

Para especificar um endereço de um destinatário ao chamar MAPISendMailW, você deve definir o membro lpszAddress da estrutura MapiRecipDescW que contém as informações do destinatário para o endereço personalizado. Essa estrutura MapiRecipDescW está incluída na matriz de destinatários armazenados no membro lpRecips da estrutura MapiMessageW que é passada para a função pelo parâmetro lpMessage .

Nota Para especificar o endereço de um destinatário quando você chamar MAPISendMail, siga as instruções anteriores para MAPISendMailW, mas substitua as estruturas MapiRecipDesc e MapiMessage .

 

Um retorno bem-sucedido da função não implica necessariamente a validação do destinatário. A mensagem pode não ter sido enviada a todos os destinatários. Dependendo do provedor de transporte, a validação do destinatário pode ser um processo longo.

Manipulando informações do destinatário

O membro lpRecips do MapiMessageW ou da estrutura MapiMessage pode incluir um identificador de entrada, o nome do destinatário, um endereço ou um par de nomes e endereços. A tabela a seguir mostra como a função lida com cada caso.
Informações do destinatário Ação
Identificador de entrada Sem resolução de nomes; o nome e o endereço são ignorados.
Nome Nome resolvido usando as regras de resolução MAPI simples.
Endereço Sem resolução de nomes; o endereço é usado para entrega de mensagens e para exibir o nome do destinatário.
Nome e endereço Sem resolução de nomes; nome usado apenas para exibir o nome do destinatário.

Requisitos

   
Cliente mínimo com suporte Windows 8 [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2012 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho mapi.h

Confira também

MAPISendMailHelper

SDK do Windows para Windows 8