Guardar un mensaje
Hace referencia a: Outlook 2013 | Outlook 2016
Antes de guardar un mensaje, los clientes suelen llamar al método IMAPIProp::SetProps del mensaje para establecer algunas propiedades además de las propiedades de texto del mensaje, las propiedades de datos adjuntos, PR_SUBJECT (PidTagSubject) y las propiedades asociadas a la lista de destinatarios.
Establezca la propiedad PR_MESSAGE_CLASS (PidTagMessageClass) en una cadena de caracteres como IPM. Tenga en cuenta que describe la clase del mensaje saliente. Aunque los clientes deben establecer PR_MESSAGE_CLASS en todos los mensajes salientes, el proveedor del almacén de mensajes proporciona un valor predeterminado si no lo establece. La clase de mensaje predeterminada para los mensajes salientes es IPM.
Establezca la marca MSGFLAG_UNSENT en la propiedad PR_MESSAGE_FLAGS (PidTagMessageFlags). Si lo desea, establezca también las marcas MSGFLAG_READ y MSGFLAG_UNMODIFIED. Establecer el MSGFLAG_UNMODIFIED permite que un mensaje en composición simule un mensaje entregado. MSGFLAG_UNMODIFIED solo los pueden establecer los clientes antes de que se guarde un mensaje por primera vez.
Cuando esté listo para realizar una copia permanente de un mensaje no enviado, llame a IMAPIProp::SaveChanges en el mensaje y todos sus datos adjuntos. Si tiene previsto enviar el mensaje de inmediato, no es necesario llamar a SaveChanges. La llamada a SubmitMessage guarda internamente el mensaje como parte de su procesamiento.
Al llamar a SaveChanges, es una buena idea especificar la marca de KEEP_OPEN_READWRITE, lo que permite modificar el mensaje más adelante. Otras marcas settables incluyen FORCE_SAVE, que indica que el mensaje o los datos adjuntos deben cerrarse después de confirmar los cambios, KEEP_OPEN_READONLY, que indica que no se realizará ningún cambio adicional, y la marca para permitir que el proveedor del almacén de mensajes realice solicitudes de cliente por lotes, MAPI_DEFERRED_ERRORS.
Es esencial llamar a SaveChanges para cada dato adjunto del mensaje antes de llamar a SaveChanges para el mensaje. Si no puede guardar los datos adjuntos, los datos adjuntos no se incluirán con el mensaje cuando se envíe y no aparecerán en la tabla de datos adjuntos del mensaje. Si no puede guardar el mensaje después de guardar todos los datos adjuntos, se perderán tanto el mensaje como los datos adjuntos.
Cuando se llama a SaveChanges , el proveedor del almacén de mensajes actualiza las siguientes propiedades:
PR_DISPLAY_TO (PidTagDisplayTo) enumera todos los destinatarios principales.
PR_DISPLAY_TO enumera todos los destinatarios de copia de carbono.
PR_DISPLAY_BCC (PidTagDisplayBcc) enumera todos los destinatarios de copia de carbono ciego.
PR_LAST_MODIFICATION_TIME (PidTagLastModificationTime)
PR_MESSAGE_FLAGS establece MSGFLAG_HASATTACH si se han guardado uno o varios datos adjuntos y borra MSGFLAG_UNMODIFIED para mostrar que el mensaje ha cambiado.
PR_MESSAGE_SIZE (PidTagMessageSize) contiene el tamaño más actual del mensaje.
PR_MESSAGE_ATTACHMENTS (PidTagMessageAttachments) proporciona acceso a la tabla de datos adjuntos.
PR_MESSAGE_RECIPIENTS (PidTagMessageRecipients) proporciona acceso a la tabla de destinatarios.
Algunas propiedades de mensaje suelen ser proporcionadas por clientes o proveedores de servicios cuando se crea un mensaje. Si un cliente se olvida de establecerlos, depende del proveedor del almacén de mensajes actualizarlos en el momento en que se llama a SaveChanges . Por ejemplo, si se establecieron las propiedades PR_ENTRYID (PidTagEntryId) y PR_RECORD_KEY (PidTagRecordKey) de un mensaje cuando se creó el mensaje, no es necesario modificarlas en el momento de ahorrar. Sin embargo, los proveedores de almacén de mensajes que no los establecen en la creación de mensajes deben establecerlos la primera vez que se llama a SaveChanges .
Si SaveChanges devuelve MAPI_E_CORRUPT_DATA, suponga que los datos que se guardan ahora se pierden. Los proveedores de almacén de mensajes que usan un modelo cliente-servidor para su implementación pueden devolver este valor cuando se pierde una conexión de red o el servidor no se está ejecutando. Antes de devolver un error al usuario, intente escribir y guardar los datos una segunda vez mediante una llamada a SetProps seguida de otra llamada a SaveChanges. Si los datos se almacenan en caché localmente, esto no debería ser un problema. Sin embargo, si no hay ninguna caché local o se produce un error en la segunda llamada a SaveChanges , muestre un error para alertar al usuario del problema.