Outlook Interop引发错误"来自HRESULT的异常:0x80004004(E_ABORT)"发送电子邮件时

时间:2017-10-11 08:44:13

标签: c# email outlook interop

我正在尝试使用C#控制台应用发送自动电子邮件。我正在使用Outlook Interop来执行此操作。当我运行下面的代码时,Outlook是打开的。代码实际上生成了电子邮件,当代码在mailItem.Send()上停止时,该电子邮件处于打开状态。 我怀疑这个问题与我的工作笔记本电脑上的某些访问政策有关,但任何指导都会有所帮助。

    public static void SendEmail(string Body, string Subject, string Recipients)
    {
        Outlook.Application app = new Outlook.Application();
        Outlook.MailItem mailItem = app.CreateItem(Outlook.OlItemType.olMailItem);
        mailItem.Subject = Subject;
        mailItem.To = Recipients;
        mailItem.HTMLBody = Body;
        mailItem.Display(false);
        mailItem.Send();
    }

完全错误:

 System.Runtime.InteropServices.COMException: 'Operation aborted (Exception from HRESULT: 0x80004004 (E_ABORT))'

2 个答案:

答案 0 :(得分:0)

您似乎遇到了Outlook安全问题。在此上下文中的“安全性”是指所谓的“对象模型防护”,它触发安全提示并阻止对某些功能的访问,以防止恶意程序从Outlook数据中收集电子邮件地址并使用Outlook传播病毒和垃圾邮件。

有一些方法可以避免此类问题:

  1. 使用不会触发安全问题或提示的低级API(扩展MAPI)。或者只是围绕该API的任何其他第三方包装器,例如Redemption。
  2. 开发COM加载项并将作为参数传递的安全Application对象用于其中一个事件处理程序。
  3. 使用Outlook Security Manager组件在运行时禁止安全检查。
  4. Outlook "Object Model Guard" Security Issues for Developers文章中了解有关所有这些选项和其他方式的详情。

答案 1 :(得分:0)

代码没有多大意义 - 您正在无模式地显示消息,因此Display立即返回,然后在用户有机会在屏幕上看到任何内容之前调用Send。您是否希望用户单击“发送”按钮?在这种情况下,只需调用Display,让用户完成剩下的工作 - 没有理由调用Send。