Diferenciando entre Adjuntos Inline y Regulares

Es un escenario común cuando un mensaje de correo puede contener imágenes inline dentro de su cuerpo así como adjuntos regulares asociados. Usando MailMessage clase, los adjuntos inline pueden extraerse desde la LinkedResourceCollection clase, mientras que los adjuntos regulares pueden accederse/extrerse con la AttachmentCollection clase de un mensaje. Sin embargo, esto es diferente cuando el mensaje se carga usando la clase Aspose.Email.Mapi.MapiMessage, ya que todas las imágenes inline y los adjuntos regulares son accesibles al usuario en la misma clase MapiAttachmentCollection. Por lo tanto, es necesario idear un método que pueda diferenciar entre un adjunto inline y uno regular cuando se usa MapiMessage.

Usando Aspose.Email para Diferenciar entre Adjuntos Inline y Regulares

Este artículo explica cómo diferenciar adjuntos inline de los regulares usando MapiMessage. Para determinar esta diferenciación, se tiene en cuenta el tipo de cuerpo de MapiMessage como sigue:

Cuerpo de texto plano: Los mensajes de correo con cuerpo de texto plano no necesitan ser revisados, ya que todos los adjuntos en dichos mensajes son siempre adjuntos regulares.

Cuerpo Html: En caso de un mensaje con tipo de cuerpo HTML, el adjunto debe contener no solo la propiedad PR_ATTACH_FLAGS (0x37140003), sino también su valor debe ser igual a 0x00000004 para los adjuntos inline. Si se cumple esta condición, depende luego de las etiquetas PR_ATTACH_CONTENT_LOCATION y PR_ATTACH_CONTENT_ID para determinar la naturaleza del adjunto. Sin embargo, en ausencia de la etiqueta Mapi PR_ATTACH_FLAGS, se verifica la propiedad PR_ATTACH_DISPOSITION (0x3716001F o 0x3716001E) para determinar el tipo de adjunto.

Cuerpo Rtf: Si el cuerpo es RTF, entonces todos los adjuntos OLE son adjuntos inline. El valor de PR_ATTACH_METHOD para todos los adjuntos OLE es igual a 0x00000006.

El siguiente ejemplo de código muestra cómo diferenciar programáticamente entre adjuntos inline y regulares. La función IsInlineAttachment recibe un adjunto y el BodyType del mensaje como parámetros de entrada y devuelve true si el adjunto es inline.