如何更新MailItem的HTMLBody

时间:2015-10-20 06:10:31

标签: c# email outlook office-interop

我正在尝试从模板创建Outlook邮件,稍微编辑它们然后向用户显示,以便他可以发送该邮件。

创建邮件并显示邮件没有问题。但是,当我试图阅读(或编辑)邮件的HTMLBody时,出现错误:

  

操作已中止(HRESULT异常:0x80004004(E_ABORT))

这是我的代码:

using Outlook = Microsoft.Office.Interop.Outlook;
...

try
{
    var app = new Outlook.Application();

    Outlook.MailItem mailItem = app.CreateItemFromTemplate("C:\\Test\\template.oft");

    var body = mailItem.HTMLBody; //Here is the exception
    mailItem.HTMLBody = body.Replace("@firstname", "Test Testy");

    mailItem.To = message.EmailAddress;
    mailItem.Display(mailItem);
}
catch (Exception ex)
{
...
}

github上添加了示例项目。

1 个答案:

答案 0 :(得分:0)

var app = new Outlook.Application();

在创建Outlook Application类的新实例之前,我建议检查它是否已经运行并获取正在运行的实例:

if (Process.GetProcessesByName("OUTLOOK").Any())
   app = System.Runtime.InteropServices.Marshal.GetActiveObject("Outlook.Application");

Outlook是一个单身人士。您无法同时运行多个实例。

此外,我建议在访问HTMLBody属性值之前保存newvly创建的项目:

 Outlook.MailItem mailItem = app.CreateItemFromTemplate("C:\\Test\\template.oft");
mailIte.Save();
var body = mailItem.HTMLBody; //Here is the exception

最后,Display方法没有采用MailItem实例。相反,您可以传递true以将检查器显示为模态窗口,或者只省略参数(默认情况下使用false)。

BTW你在何时何地运行代码?