通过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
。
不知道是什么原因。
我还想把它给客户端,所以我不能在本地保存邮件内容
如果在邮件正文的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);
}