如何更新MailItem的HTMLBody

本文关键字:MailItem HTMLBody 更新 何更新 | 更新日期: 2023-09-27 18:18:22

我正在尝试从模板创建outlook邮件,稍微编辑一下,然后显示给用户,以便他可以发送该邮件。

在创建邮件和显示邮件时没有问题。但是,当我试图读取(或编辑)邮件的HTMLBody有一个错误:

操作中止(Exception from 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)
{
...
}

如何更新MailItem的HTMLBody

var app = new Outlook.Application();

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

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

Outlook是单例的。您不能同时运行多个实例。

我还建议在访问HTMLBody属性值之前保存新创建的项目:

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

最后,Display方法不接受MailItem实例。相反,你可以传递true来让检查器显示为一个模态窗口,或者省略这个参数(默认使用false)。

顺便说一句,你在哪里和什么时候运行代码?