Función de devolución de llamada MAPISENDMAILW (mapi.h)

Envía un mensaje Unicode. Esta función reemplaza a la función ANSI MAPISendMail.

En Windows 7 y versiones anteriores: Instale el Kit de desarrollo de software (SDK) de Microsoft Windows para Windows 8 y use MAPISendMailHelper para enviar un mensaje.

Toda la información se aplica tanto a MAPISendMailW como a MAPISendMail a menos que se especifique lo contrario.

Sintaxis

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

Identificador de una sesión MAPI simple o cero.

Si el valor del parámetro lhSession es cero, MAPI inicia sesión en el usuario y crea una sesión que solo existe durante la llamada. Esta sesión temporal puede ser una sesión compartida existente o una nueva. Si es necesario, se muestra el cuadro de diálogo de inicio de sesión.

[in] ulUIParam

Tipo: ULONG_PTR

Identificador de ventana principal o cero.

Si el parámetro ulUIParam contiene el identificador de ventana principal, el identificador es el tipo HWND (convertido en un ULONG_PTR).

Si no se muestra ningún cuadro de diálogo durante la llamada, se omite ulUIParam .

[in] lpMessage

Tipo: lpMapiMessageW

Puntero a una estructura MAPISendMailW que contiene el mensaje que se va a enviar.

Nota Para la función MAPISendMail , este parámetro apunta a una estructura MapiMessage .
 
Al llamar a la función, tenga en cuenta la siguiente información sobre los miembros de la estructura de mensajes:
Miembro Notas
lpFiles Establezca este miembro en NULL cuando el mensaje no tenga datos adjuntos de archivo.
lpszMessageType Lo usan las aplicaciones que no controlan los mensajes interpersonales. Si la aplicación controla los mensajes interpersonales, establezca el miembro lpszMessageType en NULL o establézcalo para que apunte a una cadena vacía.
lpszSubject Un valor NULL significa que no hay texto para el asunto del mensaje.
lpszNoteText Un valor null significa que no hay texto en el cuerpo del mensaje.
lpRecips Un valor null significa que no hay destinatarios. Además, cuando este miembro es NULL, el miembro nRecipCount debe ser cero.
nRecipCount Un valor de cero significa que no hay destinatarios. Además, cuando este miembro es cero, el miembro lpRecips debe ser NULL.
 
Propina Al llamar a la función y no hay destinatarios, debe establecer la marca MAPI_DIALOG o la marca MAPI_DIALOG_MODELESS para solicitar al usuario información del destinatario.
 
Si no se establece MAPI_DIALOG o MAPI_DIALOG_MODELESS , los miembros nRecipCount y lpRecips de la estructura deben ser válidos para la entrega correcta del mensaje. Las aplicaciones cliente pueden establecer el miembro flFlags en MAPI_RECEIPT_REQUESTED para solicitar un informe de lectura.

Para obtener más detalles sobre cómo la función controla la información del destinatario, vea Controlar la información del destinatario en comentarios.

[in] flFlags

Tipo: FLAGS

Máscara de bits de las marcas de opción. Se pueden establecer las marcas siguientes.

Valor Significado
MAPI_DIALOG
0x00000008
Se debe mostrar un cuadro de diálogo modal de aplicación para solicitar al usuario destinatarios y otras opciones de envío.

Si no se establece MAPI_DIALOG ni MAPI_DIALOG_MODELESS , se debe especificar al menos un destinatario.

MAPI_DIALOG_MODELESS
0x00000004 | MAPI_DIALOG
Disponible en Windows con la próxima versión de Office:

Se debe mostrar un cuadro de diálogo modeless para solicitar al usuario destinatarios y otras opciones de envío.

Si se establece MAPI_DIALOG_MODELESS , el parámetro lhSession debe establecerse en cero. De lo contrario, si se establece esta marca y lhSession no es cero, Outlook generará una excepción.

Además, si se establece MAPI_DIALOG_MODELESS , el sistema omite la marca MAPI_NEW_SESSION .

Si no se establece MAPI_DIALOG ni MAPI_DIALOG_MODELESS , se debe especificar al menos un destinatario.

Propina Para usar esta marca en Windows 7 o versiones anteriores, debe tener Instalado Windows SDK para Windows 8 y la próxima versión de Office, y debe llamar a MAPISendMailHelper en lugar de MAPISendMailW.
 
MAPI_LOGON_UI
0x00000001
Se debe mostrar un cuadro de diálogo para pedir al usuario que inicie sesión si es necesario.

Si no se establece la marca MAPI_LOGON_UI , la aplicación cliente no muestra un cuadro de diálogo de inicio de sesión y devuelve un valor de error si el usuario no ha iniciado sesión.

Si el parámetro lpszMessageID está vacío, se omite la marca MAPI_LOGON_UI .

MAPI_NEW_SESSION
0x00000002
Se intenta crear una nueva sesión en lugar de adquirir la sesión compartida del entorno. Si no se establece la marca MAPI_NEW_SESSION , la función usa una sesión compartida existente.

Si establece la marca de MAPI_NEW_SESSION (lo que impide el uso de una sesión compartida) y el perfil requiere una contraseña, también debe establecer la marca MAPI_LOGON_UI o se producirá un error en la función. La aplicación cliente puede evitar este error mediante el uso del perfil predeterminado sin una contraseña o mediante un perfil explícito sin contraseña.

MAPI_FORCE_UNICODE
0x00040000
No convierta el mensaje en ANSI si el proveedor no admite Unicode.
Nota Esta marca solo está disponible para MAPISendMailW .
 

ulReserved

Tipo: ULONG

Reservados; debe ser cero.

Valor devuelto

Tipo: ULONG

Esta función devuelve uno de los valores siguientes.

Código o valor devuelto Descripción
MAPI_E_AMBIGUOUS_RECIPIENT
21
Un destinatario coincide con más de una de las estructuras de descriptor de destinatario y no se estableció MAPI_DIALOG. No se envió ningún mensaje.
MAPI_E_ATTACHMENT_NOT_FOUND
11
No se encontraron los datos adjuntos especificados. No se envió ningún mensaje.
MAPI_E_ATTACHMENT_OPEN_FAILURE
12
No se pudieron abrir los datos adjuntos especificados. No se envió ningún mensaje.
MAPI_E_ATTACHMENT_TOO_LARGE
28
Los datos adjuntos especificados eran demasiado grandes. No se envió ningún mensaje.
MAPI_E_BAD_RECIPTYPE
15
El tipo de destinatario no se MAPI_TO, MAPI_CC ni MAPI_BCC. No se envió ningún mensaje.
MAPI_E_FAILURE
2
Se han producido uno o varios errores no especificados. No se envió ningún mensaje.
MAPI_E_INSUFFICIENT_MEMORY
5
No había memoria suficiente para continuar. No se envió ningún mensaje.
MAPI_E_INVALID_RECIPS
25
Uno o varios destinatarios no eran válidos o no se resolvieron en ninguna dirección.
MAPI_E_LOGIN_FAILURE
3
No había ningún inicio de sesión predeterminado y el usuario no pudo iniciar sesión correctamente cuando se mostraba el cuadro de diálogo de inicio de sesión. No se envió ningún mensaje.
MAPI_E_TEXT_TOO_LARGE
18
El texto del mensaje era demasiado grande. No se envió ningún mensaje.
MAPI_E_TOO_MANY_FILES
9
Había demasiados archivos adjuntos. No se envió ningún mensaje.
MAPI_E_TOO_MANY_RECIPIENTS
10
Había demasiados destinatarios. No se envió ningún mensaje.
MAPI_E_UNICODE_NOT_SUPPORTED
27
Se especifica la marca MAPI_FORCE_UNICODE y no se admite Unicode.
NotaMAPISendMailW solo puede devolver este valor.
 
MAPI_E_UNKNOWN_RECIPIENT
14
Un destinatario no apareció en la lista de direcciones. No se envió ningún mensaje.
MAPI_E_USER_ABORT
1
El usuario canceló uno de los cuadros de diálogo. No se envió ningún mensaje.
SUCCESS_SUCCESS
0
La llamada se realizó correctamente y se envió el mensaje.

Comentarios

Las funciones MAPISendMailW (Unicode) y MAPISendMail (ANSI) envían un mensaje estándar, con o sin ninguna interacción del usuario. El perfil debe configurarse para que cualquiera de las funciones pueda abrir los proveedores de servicios predeterminados sin necesidad de interacción del usuario.

Ni MAPISendMailW ni MAPISendMail requieren un destinatario de tipo originador para enviar un mensaje.

La aplicación cliente puede proporcionar una lista completa o parcial de nombres de destinatarios, texto de asunto, datos adjuntos de archivo o texto de mensaje. Si falta información, la función a la que llama ( MAPISendMailW o MAPISendMail) puede solicitar al usuario la información que falta.

Si no falta información, se puede enviar el mensaje tal y como está o se puede pedir al usuario que compruebe la información y cambie los valores si es necesario.

MAPISendMailW y MAPISendMail difieren de la función MAPISendDocuments en que permiten una mayor flexibilidad en la generación de mensajes.

Texto del mensaje

Algunas aplicaciones cliente pueden truncar líneas de asunto demasiado largas o contener retornos de carro, avance de línea o fuentes de formulario.

Cada párrafo debe terminarse con una CR (0x0d), un LF (0x0a) o un par CRLF (0x0d0a). Tanto MAPISendMailW como MAPISendMail encapsulan líneas según corresponda.

Si el texto supera los límites del sistema, la función devuelve el valor MAPI_E_TEXT_TOO_LARGE .

Archivos adjuntos

El número de datos adjuntos por mensaje puede limitarse en algunos sistemas de mensajería. Si se supera este límite, se produce un error en la función y devuelve el valor MAPI_E_TOO_MANY_FILES .

Los datos adjuntos de archivo se copian en el mensaje antes de que la función devuelva; por lo tanto, los cambios posteriores en los archivos no afectan al contenido del mensaje. Los archivos deben cerrarse cuando se copian.

No intente mostrar datos adjuntos fuera del intervalo del texto del mensaje.

Destinatarios

Algunos sistemas de mensajería pueden limitar el número de destinatarios por mensaje. Si la aplicación cliente pasa un valor distinto de NULL que indica un número de destinatarios que superan el límite del sistema, se produce un error en la función y devuelve el valor de MAPI_E_TOO_MANY_RECIPIENTS .

Si la aplicación cliente envía mensajes a uno o varios destinatarios personalizados y desea evitar resolver los nombres de esos destinatarios, debe especificar la dirección del destinatario personalizado.

Para especificar una dirección de un destinatario al llamar a MAPISendMailW, debe establecer el miembro lpszAddress de la estructura MapiRecipDescW que contiene la información del destinatario en la dirección personalizada. Esta estructura MapiRecipDescW se incluye en la matriz de destinatarios almacenados en el miembro lpRecips de la estructura MapiMessageW que el parámetro lpMessage pasa a la función.

Nota Para especificar la dirección de un destinatario al llamar a MAPISendMail, siga las instrucciones anteriores para MAPISendMailW, pero sustituya las estructuras MapiRecipDesc y MapiMessage .

 

Una devolución correcta de la función no implica necesariamente la validación del destinatario. Es posible que el mensaje no se haya enviado a todos los destinatarios. Dependiendo del proveedor de transporte, la validación de destinatarios puede ser un proceso largo.

Control de la información del destinatario

El miembro lpRecips de la estructura MapiMessageW o MapiMessage puede incluir un identificador de entrada, el nombre del destinatario, una dirección o un par de nombres y direcciones. En la tabla siguiente se muestra cómo controla la función cada caso.
Información del destinatario Acción
Identificador de entrada Sin resolución de nombres; se omiten el nombre y la dirección.
Nombre Nombre resuelto mediante las reglas de resolución MAPI simples.
Dirección Sin resolución de nombres; la dirección se usa para la entrega de mensajes y para mostrar el nombre del destinatario.
Nombre y dirección Sin resolución de nombres; name usado solo para mostrar el nombre del destinatario.

Requisitos

   
Cliente mínimo compatible Windows 8 [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2012 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado mapi.h

Consulte también

MAPISendMailHelper

Windows SDK para Windows 8