2013-12-06 3 views
8

В настоящее время я разрабатываю Outlook Addin, который сохраняет MailItems и вложения в моей базе данных MSSQL.Сохранение только вложений REAL для Outlook MailItem

У меня есть метод, когда я сохраняю MailItem со всеми его вложениями. Но если я сохраню все вложения, встроенные изображения в MailItem также будут сохранены.

Кто-нибудь знает, как сэкономить все real вложения ?? Я имею в виду, как вложения в рисунке:

enter image description here

, а не embbeded изображения, которые находятся в теле письма.

Вот код, который я использую для перебора всех привязанностей в MailItem, а затем сохранить его:

foreach (Outlook.Attachment att in mailItem.Attachments) 
{ 
     try 
     { 
      att.SaveAsFile(Path.GetTempPath() + att.FileName); 

      var fi = new FileInfo(Path.GetTempPath() + att.FileName); 

      //Saving attachment to DB 
      var attachment = Attachment.NieuwAttachment(att.FileName, SelectedMap.DossierNr.ToString(CultureInfo.InvariantCulture), -1, Convert.ToInt32(SelectedMap.Tag), fi); 
      if (!Attachment.InlezenAttachment(attachment)) continue; 

      OutlookCategories.AddAttachmentCategory(mailItem); 
     } 
     catch (Exception ex) 
     { 
      var dmsEx = new DmsException("Er is een fout opgetreden bij het opslaan van een bijlage.", ex.Message, ex); 
      ExceptionLogger.LogError(dmsEx); 
     } 
} 

Спасибо!

----------- EDIT ------------

Я также отвечал на этот вопрос на Microsoft TechNet, и я только что получил ответ на вопрос (см ссылку ниже)

Outlook 2007 & 2010: Save all attachments except the embedded attachments C#

----------- EDIT ------------

Моя проблема еще не фиксирована, помощь, которую я получил от Microsoft, бесполезна. Поэтому, пожалуйста, мне действительно нужно, чтобы это было исправлено!

+1

Где код, который вы сейчас? –

ответ

0

В зависимости от того, как вы определяете «реальные» или «правильные» вложения. Я собираюсь предположить, что вы хотите игнорировать все изображения, встроенные в электронную почту. Это также вложения, но они указаны в фактическом теле письма html.

См. this ответ на вопрос о том, как встраиваются вложения. Ключ состоит в том, чтобы игнорировать вложения, которые имеют значение Content-ID, на которое ссылается тег изображения в теле самого сообщения.

+1

Хорошо, я получил часть, в которой вы сказали: игнорировать вложения, у которых есть Content-ID, но на C# и OOM нет идентификатора контента на объекте вложения ... Так что это делает его любопытным ... – JRO

+1

Это отличный момент! Нет ли способа получить доступ к самому сырому письму? –

+1

Единственный способ получить доступ к необработанному электронному письму - это преобразовать его в mhtml и выкопать в файл mhtml, но тогда вложения (вложения, которые мне нужны) расположены ... Короче говоря, я не думаю, что там является способом доступа к необработанной почте без потери моих вложений или с помощью самого файла .msg ... – JRO

0

Это работает для меня:

var test = attachments[i].PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E"); 
if (string.IsNullOrEmpty((string)test)) 
{ 
     //attachment 
} 
else 
{ 
     //embedded image 
} 
+0

Я пробовал это. Это не сработало для меня. Он распознает даже настоящие вложения как встроенные. –

1

Используйте этот код ответил here:

if (mailItem.Attachments.Count > 0) 
     { 
      // get attachments 
      foreach (Attachment attachment in mailItem.Attachments) 
      { 
       var flags = attachment.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x37140003"); 

       //To ignore embedded attachments - 
       if (flags != 4) 
       { 
        // As per present understanding - If rtF mail attachment comes here - and the embeded image is treated as attachment then Type value is 6 and ignore it 
        if ((int)attachment.Type != 6) 
        { 

         MailAttachment mailAttachment = new MailAttachment { Name = attachment.FileName }; 
         mail.Attachments.Add(mailAttachment); 
        } 

       } 

      } 
     } 
Смежные вопросы