C# 使用Outlook发送不带主题的电子邮件--对话框问题

C# 使用Outlook发送不带主题的电子邮件--对话框问题,c#,outlook,office-interop,C#,Outlook,Office Interop,我使用以下代码使用Outlook发送电子邮件: private static void SendMailItem(字符串from、字符串to、字符串主题、字符串正文、字符串附件=null) { Microsoft.Office.Interop.Outlook.Application app=新的Microsoft.Office.Interop.Outlook.Application(); Microsoft.Office.Interop.Outlook.MailItem MailItem=app

我使用以下代码使用Outlook发送电子邮件:

private static void SendMailItem(字符串from、字符串to、字符串主题、字符串正文、字符串附件=null)
{
Microsoft.Office.Interop.Outlook.Application app=新的Microsoft.Office.Interop.Outlook.Application();
Microsoft.Office.Interop.Outlook.MailItem MailItem=app.CreateItem(Microsoft.Office.Interop.Outlook.OlimType.olMailItem);
mailItem.Subject=主题;
mailItem.To=To;
mailItem.Body=Body;
如果(附件!=null)
{
mailItem.Attachments.Add(附件,Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue);
}
mailItem.Importance=Microsoft.Office.Interop.Outlook.OlImportance.olImportanceHigh;
mailItem.Display(false);
mailItem.Send();
}
它工作得几乎完美,但我在尝试发送一封没有主题的电子邮件时遇到了一个问题。弹出以下对话框:


我想跳过此提示或自动接受(无论如何发送)。如何实现这一点?

注释掉
mailItem.Display(false)

  • 您可以指定
    主题
    行。确保字符串不为空或null
  • 或者只发送项目而不显示:
  • 请注意,在自动化Outlook时,您可能会收到Outlook安全提示。Outlook对象模型包括访问Outlook数据、将数据保存到指定位置以及发送电子邮件的入口点。合法和恶意应用程序开发人员都可以使用这些入口点。Outlook 98和Outlook 2000版本与Outlook电子邮件安全更新一起应用,从Outlook 2000 SP2开始的所有后续版本都使用对象模型保护来帮助保护用户

    当不受信任的应用程序试图使用对象模型获取电子邮件地址信息、在Outlook之外存储数据、执行某些操作以及发送电子邮件时,对象模型卫士会警告用户并提示用户进行确认。尽管对象模型保护成功地识别和保护了这些入口点,但存在两个主要问题,使对象模型保护变得不实用:

    在早期版本的Outlook中,应用程序调用对象模型保护的默认情况可能会导致对合法应用程序的过度安全提示

    COM和Windows在识别调用对象模型保护的特定应用程序方面的局限性使得用户很难确定地响应安全提示

    有关对象模型保护的各种安全提示的详细信息,请参见。有关受保护对象模型入口点的详细信息,请参见

    要避免出现安全提示,您可以使用:

  • 允许在运行时关闭安全提示
  • 不触发安全提示的低级API(扩展MAPI)。或者只是API的包装,比如Redemption
  • 部署Outlook安全设置(针对管理员)

  • app.DisplayAlerts=false
    是在自动化过程中停止其他Office应用程序显示对话框的方法,但不知道这是否适用于Outlook。可能值得一试。您使用这种方式而不是SMTP有什么具体原因吗?@stuartd-Outlook.Application对象没有公开DisplayAlerts属性。@DmitryStreblechenko我想可能没有。顺便说一句,很多年前我是一个非常快乐的赎回用户:)@WamiqRehman是的,我有理由在
    System.Net.Mail
    上使用
    Microsoft.Office.Interop.Outlook
    。这是正确的解决方案——我误解了
    mailItem.Display(false)
    会做什么,我想我需要它来阻止对话框/窗口等显示。结果恰恰相反!
    private static void SendMailItem(string from, string to, string subject, string body, string attachment = null)
       {
         Microsoft.Office.Interop.Outlook.Application app = new Microsoft.Office.Interop.Outlook.Application();
         Microsoft.Office.Interop.Outlook.MailItem mailItem = app.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem);
         mailItem.Subject = subject;
         mailItem.To = to;
         mailItem.Body = body;
         if (attachment != null)
         {
           mailItem.Attachments.Add(attachment, Microsoft.Office.Interop.Outlook.OlAttachmentType.olByValue);
         }
         mailItem.Importance = Microsoft.Office.Interop.Outlook.OlImportance.olImportanceHigh;   
         mailItem.Send();
       }