Diferenciando Entre Anexos Inline e Regulares
É um cenário comum quando uma mensagem de email pode conter imagens inline dentro do corpo, bem como anexos regulares associados a ela. Usando MailMessage classe, os anexos inline podem ser extraídos da LinkedResourceCollection classe, enquanto os anexos regulares podem ser acessados/extrados com a AttachmentCollection classe de uma mensagem. Contudo, isso é diferente quando a mensagem é carregada usando a classe Aspose.Email.Mapi.MapiMessage, pois todas as imagens inline e anexos regulares ficam acessíveis ao usuário na mesma classe MapiAttachmentCollection. Portanto, é necessário criar um método que possa diferenciar entre um anexo inline e um anexo regular quando MapiMessage é usado.
Usando Aspose.Email para Diferenciar Anexos Inline de Regulares
Este artigo explica como diferenciar anexos inline de anexos regulares usando MapiMessage. Para determinar essa diferenciação, o tipo de corpo do MapiMessage é considerado da seguinte forma:
Corpo Texto Simples: Mensagens de email com tipo de corpo texto simples não precisam ser verificadas, pois todos os anexos em tais mensagens são sempre anexos regulares.
Corpo Html: No caso de uma mensagem com tipo de corpo HTML, o anexo não deve apenas conter a propriedade PR_ATTACH_FLAGS (0x37140003), mas também seu valor deve ser igual a 0x00000004 para anexos inline. Se essa condição for atendida, então depende ainda das tags PR_ATTACH_CONTENT_LOCATION e PR_ATTACH_CONTENT_ID para determinar a natureza do anexo. Contudo, na ausência da tag Mapi PR_ATTACH_FLAGS, o anexo é verificado pela propriedade PR_ATTACH_DISPOSITION (0x3716001F ou 0x3716001E) para determinar o tipo de anexo.
Corpo Rtf: Se o corpo for RTF, então todos os anexos OLE são anexos inline. O valor de PR_ATTACH_METHOD para todos os anexos OLE é igual a 0x00000006.
O exemplo de código a seguir demonstra como diferenciar programaticamente entre anexos inline e regulares. A função IsInlineAttachment recebe um anexo e o BodyType da Mensagem como parâmetros de entrada e retorna true se o anexo for um anexo Inline.