在 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
);
请注意,您需要将文件保存在磁盘上并将其重新附加到新电子邮件中。 Add Attachment 类的方法接受一个文件(由带有文件名的完整文件系统路径表示)或构成附件的 Outlook 项目。
此外,我建议避免使用 OOM 对象的代码中的 foreach
循环。请改用 for 循环。它允许立即释放底层 COM 对象。使用System.Runtime.InteropServices.Marshal.ReleaseComObject使用完 Outlook 对象后释放该对象。然后将变量设置为 Visual Basic 中的 Nothing(C# 中的 null)以释放对该对象的引用。您可以在Systematically Releasing Objects中阅读更多相关信息。文章。
关于c# - 通过C#编码将邮件正文复制到outlook中的新邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33254846/