2015-10-21 1 views
2

В Outlook 2013 я хочу, чтобы содержимое почтового тела было создано в новой почте программно.
Ниже мой код:Копирование тела почты на новую почту в Outlook с помощью кодирования в C#

void Inspectors_NewInspector(Microsoft.Office.Interop.Outlook.Inspector Inspector) 
{ 
    Outlook.MailItem mailItem = Inspector.CurrentItem as Outlook.MailItem; 
    Outlook.Application oApp = new Outlook.Application(); 
    Outlook.Explorer oExplorer = oApp.ActiveExplorer(); 
    Outlook.Selection oSelection = oExplorer.Selection; 

    foreach (object item in oSelection) 
    { 
     Outlook.MailItem mi = (Outlook.MailItem)item; 
     mailItem.HTMLBody = mi.HTMLBody; 
    } 
} 

Все отлично работает, но изображение не появляется в оригинальной почте. Вместо этого он показывает что-то вроде cid:image002.png.

Не знаете, в чем причина.

Также я хочу передать его клиенту, поэтому я не могу сохранить почтовый контент локально.

+0

Вы скопировали вложения? где изображения обычно сохраняются. – user1666620

+0

Не знаете, как это сделать. а также если мы скопируем, как мы добавим его в новую почту? –

ответ

1

Как я понимаю, вы хотите, чтобы скопировать вложения из существующей MailItem к новому ... Тогда вы можете попробовать это

foreach(var x in mailItem.Attachments) 
{ 
    mi.Attachments.Add(x); 
} 
+1

Вы пытались запустить код? это никогда не сработает! –

+0

Спасибо за ответ ... первое, что нужно для обмена mailitem и mi. то во время выполнения он предоставляет COMException для Add(). –

+0

@Eugene работает для меня в случае MailMessage .. не пробовал элемент outlook, хотя – CThakur

4

Если вы видите cid:image002.png заявления в HTML-разметке тела сообщения вам нужно прикреплять вложенные элементы к новым письмам.

Основным принципом добавления встроенного изображения является прикрепление изображения к элементу, а затем использование HTMLBody для написания HTML для добавления вложения cid в качестве ссылки в HTML.

Attachment attachment = newMail.Attachments.Add(
@"E:\Pictures\image001.jpg" 
, OlAttachmentType.olEmbeddeditem 
, null 
, "Some image display name" 
); 

string imageCid = "[email protected]"; 

attachment.PropertyAccessor.SetProperty(
"http://schemas.microsoft.com/mapi/proptag/0x3712001E" 
, imageCid 
); 

newMail.HTMLBody = String.Format(
"<body><img src=\"cid:{0}\"></body>" 
, imageCid 
); 

Знайте, вам нужно будет сохранить файл на диске и повторно подключить его к новому электронному письму. Метод Add класса Attachment принимает файл (представлен полный путь файловой системы с именем файла) или элемент Outlook, который представляет собой вложение.

Также я бы рекомендовал избегать цикла foreach в коде с объектами OOM. Вместо этого используйте цикл for. Он позволяет мгновенно выпустить базовые COM-объекты. Используйте System.Runtime.InteropServices.Marshal.ReleaseComObject, чтобы освободить объект Outlook, когда вы его закончили. Затем установите переменную Nothing в Visual Basic (null на C#), чтобы освободить ссылку на объект. Вы можете узнать больше об этом в статье Systematically Releasing Objects.

+0

Оцените реакцию ур. Поскольку я разрабатываю его для проекта, который будет использоваться другим пользователем, чтобы сохранить приложение локально, и его использование будет утомительным. Любой другой подход !!! –

+0

Объектная модель Outlook не предоставляет ничего для этого. –

+0

Используйте System.IO.Path.GetTempFileName(), чтобы получить имя файла temp, удалить его, создать новую папку с этим именем, сохранить там вложение, добавить в другое сообщение, удалить файл и папку. Если вы используете вариант Redemption I, его RDOMail.Attachments.Add позволяет передать другое вложение в качестве параметра. –

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