Преобразование Microsoft.Office.Interop.Outlook.Attachment в System.Net.Mail.Attachment в С#

В настоящее время я программирую надстройку для Outlook 2007 и столкнулся с проблемой, когда пытался сериализовать вложение. Хотя у вложений System.Net.Mail есть ContentStream, который я могу использовать для сериализации данных, у вложений Microsoft.Office.Interop.Outlook его нет. К сожалению, единственный тип вложения, который я могу получить непосредственно из Outlook, — это Microsoft.Office.Interop.Outlook. Я немного поискал и не смог найти ничего похожего.

MailItem item = getMailObj(e);    
String dataSend = serializeAttachment((System.Net.Mail.Attachment)item.Attachments[1]);

Как видите, я попытался преобразовать исходное вложение, но получил исключение Invalid Cast Exception:

Не удалось преобразовать COM-объект типа «System.__ComObject» в тип класса «System.Net.Mail.Attachment». Экземпляры типов, представляющих COM-компоненты, не могут быть приведены к типам, которые не представляют COM-компоненты; однако их можно приводить к интерфейсам, если базовый компонент COM поддерживает вызовы QueryInterface для IID интерфейса.

я тоже не могу просто поставить

System.Net.Mail.Attachment newAtt = item.Attachments[1];

Поскольку VisualStudio 2010 просто говорит мне привести его к типу. Любые предложения о том, как это исправить?


person Saynes    schedule 31.03.2011    source источник


Ответы (2)


Я не думаю, что типы могут быть преобразованы или преобразованы. Просто прочитайте содержимое вложения Outlook и запишите его в Mail.Attachment.

person STO    schedule 31.03.2011
comment
Я пытался сделать это, но, к сожалению, в версии Microsoft Attachment нет ContentStream для передачи информации в сетевую версию Attachment. Единственные свойства, которые я могу передать, это имя файла, размер и тип. - person Saynes; 05.04.2011
comment
Вы можете использовать GetTemporaryFilePath() msdn. microsoft.com/en-us/library/ или SaveAsFile() msdn.microsoft.com/en-us/library/ для получения содержимого вложения Outlook. - person STO; 05.04.2011
comment
Я пытался использовать GetTemporaryFilePath(), но при попытке его использования получаю следующую ошибку: «Не удается получить доступ к этому вложению в папке временных файлов. Используйте этот метод в событии вложения, чтобы получить путь к временному файлу». Я бы также предпочел не сохранять файл с помощью SaveAsFile(). - person Saynes; 07.04.2011
comment
Я думаю, вам нужно будет использовать метод SaveAsFile, потому что на первый взгляд нет способов получить содержимое вложения. Используйте метод Path.GetTempFileName msdn.microsoft.com/en -us/library/ и сохраните содержимое вложения в этом временном файле. - person STO; 09.04.2011

Я попробовал этот код, и он работает:

htmbody = "<HTML><BODY>"
htmbody = htmbody + "<table border=0>"
htmbody = htmbody + "<tr>"
htmbody = htmbody + "<td><img src=C:\temp\filename\place.png></td>"
person Ryan Dela Cruz Culaway    schedule 07.06.2016