通过c#编码将邮件正文复制到outlook中的新邮件

本文关键字:outlook 新邮件 复制 正文 编码 通过 | 更新日期: 2023-09-27 18:18:41

在Outlook 2013中,我希望以编程方式在新邮件中显示邮件正文的内容。
下面是我的代码:

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

不知道是什么原因。

我还想把它给客户端,所以我不能在本地保存邮件内容

通过c#编码将邮件正文复制到outlook中的新邮件

如果在邮件正文的HTML标记中看到cid:image002.png语句,则需要将嵌入的项目也附加到新邮件中。

添加嵌入式图像的基本原理是将图像附加到项目上,然后使用HTMLBody编写HTML将附件cid添加到HTML中作为引用。

Attachment attachment = newMail.Attachments.Add(
 @"E:'Pictures'image001.jpg"
, OlAttachmentType.olEmbeddeditem
, null
, "Some image display name"
);
string imageCid = "image001.jpg@123";
attachment.PropertyAccessor.SetProperty(
 "http://schemas.microsoft.com/mapi/proptag/0x3712001E"
, imageCid
);
newMail.HTMLBody = String.Format(
 "<body><img src='"cid:{0}'"></body>"
, imageCid
);

请注意,您需要将文件保存在磁盘上,然后将其重新附加到新电子邮件中。Attachment类的Add方法接受构成附件的文件(由带有文件名的完整文件系统路径表示)或Outlook项目。

我还建议在使用OOM对象的代码中避免foreach循环。使用for循环代替。它允许立即释放底层COM对象。使用System.Runtime.InteropServices.Marshal.ReleaseComObject来释放一个Outlook对象。然后在Visual Basic中设置一个变量为Nothing (c#中为null)来释放对对象的引用。你可以在系统释放对象的文章中了解更多。

据我所知,您想将附件从现有邮件复制到新邮件中…那么你可以试试这个

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