2012-09-04 33 views
8

Necesito obtener y guardar los archivos adjuntos de un elemento de correo, pero utilizando el código a continuación devuelve todos los archivos adjuntos, lo que significa que también devuelve las imágenes incrustadas como la firma del remitente con el logotipo que es una imagen. ¿Cómo puedo diferenciar un accesorio verdadero frente a imágenes incrustadas? He visto mucho de los foros, pero aún no está claro para mí.vsto + diferenciar archivos adjuntos

public static void SaveData(MailItem currentMailItem) 
{ 
    if (currentMailItem != null) 
    {  
     if (currentMailItem.Attachments.Count > 0) 
     { 
      for (int i = 1; i <= currentMailItem.Attachments.Count; i++) 
      { 
       currentMailItem.Attachments[i].SaveAsFile(@"C:\TestFileSave\" + currentMailItem.Attachments[i].FileName); 
      } 
     } 
    } 
} 

Respuesta

8

Puede comprobar si un archivo adjunto está en línea o no utilizando la siguiente pseudo-code from MS Technet Forums.

if body format is plain text then 
    no attachment is inline 
else if body format is RTF then 
    if PR_ATTACH_METHOD value is 6 (ATTACH_OLE) then 
    attachment is inline 
    else 
    attachment is normal 
else if body format is HTML then 
    if PR_ATTACH_FLAGS value has the 4 bit set (ATT_MHTML_REF) then 
    attachment is inline 
    else 
    attachment is normal 

Se puede acceder al formato de cuerpo del mensaje usando MailItem.BodyFormat y las propiedades de fijación MIME utilizandoAttachment.PropertyAccessor.

string PR_ATTACH_METHOD = 'http://schemas.microsoft.com/mapi/proptag/0x37050003'; 
var attachMethod = attachment.PropertyAccessor.Get(PR_ATTACH_METHOD); 

string PR_ATTACH_FLAGS = 'http://schemas.microsoft.com/mapi/proptag/0x37140003'; 
var attachFlags = attachment.PropertyAccessor.Get(PR_ATTACH_FLAGS); 
+1

muchas gracias! ¡funciona! – Liz

Cuestiones relacionadas