繁体   English   中英

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

[英]Outlook Interop Throws Error “Exception from HRESULT: 0x80004004 (E_ABORT)” When Sending Email

我正在尝试使用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))'

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

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

  1. 使用不会触发安全性问题或提示的低级API(扩展MAPI)。 或围绕该API的任何其他第三方包装,例如“兑换”。
  2. 开发一个COM加载项,并使用作为参数传递给事件处理程序之一的安全Application对象。
  3. 使用Outlook Security Manager组件在运行时禁止安全检查。

开发人员Outlook“对象模型保护”安全问题文章中,了解有关所有这些选项和其他方式的更多信息。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM