Crear el texto del mensaje
Hace referencia a: Outlook 2013 | Outlook 2016
Aunque algunos mensajes se componen de nada más que una lista de destinatarios y una línea de asunto, el contenido de la mayoría de los mensajes, específicamente IPM. Tenga en cuenta los mensajes, incluye texto. El texto del mensaje puede ser sin formato o con formato y se almacena en tres propiedades: PR_BODY (PidTagBody), PR_HTML (PidTagHtml) y PR_RTF_COMPRESSED (PidTagRtfCompressed).
Si el cliente está basado en texto sin formato, establezca PR_BODY. Si admite texto con formato en formato de texto enriquecido (RTF), establezca PR_RTF_COMPRESSED solo o tanto PR_RTF_COMPRESSED como PR_BODY, en función del proveedor de almacén de mensajes que use. Cuando un cliente compatible con RTF usa un almacén de mensajes compatible con RTF, establece solo PR_RTF_COMPRESSED . Cuando un cliente compatible con RTF usa un almacén de mensajes no compatible con RTF, establece ambas propiedades. Si el cliente admite HTML, establezca la propiedad PR_HTML .
Determinar si el almacén de mensajes admite formato de texto enriquecido
Llame al método IMAPIProp::GetProps del almacén de mensajes para recuperar la propiedad PR_STORE_SUPPORT_MASK (PidTagStoreSupportMask).
Compruebe el bit de STORE_RTF_OK. Si se establece STORE_RTF_OK, el proveedor del almacén de mensajes admite texto RTF. Si no está establecido, el proveedor del almacén de mensajes solo admite texto sin formato.
Determinar si el almacén de mensajes admite HTML
Llame al método IMAPIProp::GetProps del almacén de mensajes para recuperar la propiedad PR_STORE_SUPPORT_MASK .
Compruebe el bit de STORE_HTML_OK. Si se establece STORE_HTML_OK, el proveedor del almacén de mensajes admite texto HTML.
Establecer PR_RTF_COMPRESSED
Llame al método IMAPIProp::OpenProperty del mensaje para abrir la propiedad PR_RTF_COMPRESSED , especificando IID_IStream como identificador de interfaz y estableciendo la marca de MAPI_CREATE.
Llame a la función WrapCompressedRTFStream y pase la marca STORE_UNCOMPRESSED_RTF si el bit de STORE_UNCOMPRESSED_RTF está establecido en la propiedad PR_STORE_SUPPORT_MASK del almacén de mensajes.
Libere la secuencia original llamando a su método IUnknown::Release .
Llame a IStream::Write o A IStream::CopyTo para escribir el texto del mensaje en la secuencia devuelta desde WrapCompressedRTFStream.
Llame a los métodos Commit y Release en la secuencia devuelta desde el método OpenProperty .
En este momento, si el proveedor del almacén de mensajes admite RTF, ha hecho todo lo necesario. Puede depender del proveedor del almacén de mensajes para controlar la sincronización del contenido y el formato del mensaje y para crear la propiedad PR_BODY si es necesario. Los almacenes de mensajes compatibles con RTF llaman a RTFSync para controlar la sincronización. Si la marca de RTF_SYNC_BODY_CHANGED está establecida en TRUE, el proveedor volverá a calcular la propiedad PR_BODY .
Si el proveedor del almacén de mensajes no admite RTF, también debe agregar contenido de mensajes que no sean RTF estableciendo la propiedad PR_BODY .
Establecer PR_HTML
Llame al método IMAPIProp::OpenProperty para abrir la propiedad PR_HTML con la interfaz IStream .
Llame a IStream::Write para escribir los datos de texto del mensaje en la secuencia devuelta desde OpenProperty.
Llame a IStream::Commit e IUnknown::Release en la secuencia para confirmar los cambios y liberar su memoria.
Establecer PR_BODY
Llame al método IMAPIProp::OpenProperty para abrir la propiedad PR_BODY con la interfaz IStream .
Llame a IStream::Write para escribir los datos de texto del mensaje en la secuencia devuelta desde OpenProperty.
Llame a la función RTFSync para sincronizar el texto con el formato. Dado que se trata de un mensaje nuevo, establezca las marcas RTF_SYNC_RTF_CHANGED y RTF_SYNC_BODY_CHANGED para indicar que tanto la versión RTF como la versión de texto sin formato del texto del mensaje han cambiado. RTFSync establecerá varias propiedades relacionadas que requiere el proveedor del almacén de mensajes, como PR_RTF_IN_SYNC (PidTagRtfInSync) y las escribirá en el mensaje.
Llame a IStream::Commit e IUnknown::Release en la secuencia para confirmar los cambios y liberar su memoria.