2017-01-11 2 views
1

Я пытаюсь использовать объект Outlook в службе Windows для чтения писем из папки «Входящие», а затем извлечения встроенных изображений. Но почта может иметь любые встроенные в нее изображения. Есть ли простой метод в API перспективы, где я могу сохранить все встроенные в формате GIF?Сохранить встроенные изображения из Outlook в формате GIF

if (newEmail.Attachments.Count > 0) 
      { 
       for (int i = 1; i <= newEmail 
        .Attachments.Count; i++) 
       { 
        string value = newEmail.Attachments[i].PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x3712001E"); 

        if (!String.IsNullOrEmpty(value)) 
        { 
        newEmail.Attachments[i].SaveAsFile 
         (@"C:\TestFileSave\" + 
         newEmail.Attachments[i].FileName); 
        } 
       } 
      } 
+0

Нет, вам нужно будет использовать двоичное обнаружение для типов шахт, чтобы подтвердить прикрепление изображения, а затем сохранить его как gif. Какая желаемая функциональность? Только фотографии? –

+0

@JeremyThompson Да, я хочу сохранить все встроенные файлы. Я думаю, что в большинстве случаев пользователи будут вставлять изображения скриншотов и т. Д. Какие другие файлы могут быть встроены в почту вообще (кроме изображений)? – Navaneet

+0

В режиме RTF вы можете поместить файлы, афаик они будут вложениями (извините, не могу вспомнить последний раз, когда я проверил), и я не видел встроенного видео или аудиоклипа. –

ответ

1

Вы не можете использовать объектную модель Outlook в службе. Почему бы не создать добавление COM.

Вы также проверяете наличие свойства PR_ATTACH_CONTENT_ID. Имейте в виду, что заголовок MIME Content-ID может быть установлен на любом вложении, это не обязательно изображение, вам нужно будет проверить тело HTML для этого.

+0

Так что я не могу использовать Microsoft.Office.Interop.Outlook .dll с сервисом windows? Если это невозможно, тогда какое решение? – Navaneet

+1

Ваши варианты - расширенный MAPI (C++ или Delphi), Redemption (он переносит расширенный MAPI и может использоваться с любого языка) или EWS (в случае почтового ящика Exchange). –

+0

Так что interoper outlook не работает или это просто проблема безопасности, что его нельзя использовать в службе Windows. Я попытался использовать его в службе Windows на одной из моих машин, и это сработало! но на другом сервере я получил удаленный вызов процедуры, когда я попытался получить mailitem.SenderEmailAddress. В обоих случаях служба Windows выполнила вход пользователя, установленного пользователем, имеющим соединение Outlook. Итак, в чем причина этих двух сценариев? – Navaneet

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