【问题标题】:How to update HTMLBody of the MailItem如何更新 MailItem 的 HTMLBody
【发布时间】:2015-10-21 07:02:32
【问题描述】:

我正在尝试从模板创建 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 上添加了示例项目。

【问题讨论】:

    标签: c# email outlook office-interop


    【解决方案1】:
    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)。

    顺便说一句,您在何时何地运行代码?

    【讨论】:

    • 感谢您的回答和对 Outlook 管理的改进,但没有帮助。我仍然无法阅读 HTMLBody。我尝试保存邮件(虽然不是真的需要)或在访问正文之前显示它 - 不走运。我的应用程序是一个小型 win 表单测试项目 - 用户单击该按钮,应该会弹出预填充的 Outlook 模板。
    猜你喜欢
    • 2016-03-22
    • 2017-02-16
    • 1970-01-01
    • 2017-07-27
    • 2023-03-18
    • 2021-12-26
    • 2021-04-29
    • 2018-01-01
    • 2015-04-29
    相关资源
    最近更新 更多