C# 通过MS Outlook发送电子邮件并禁用警告

C# 通过MS Outlook发送电子邮件并禁用警告,c#,outlook,exchange-server,C#,Outlook,Exchange Server,我有一个C#程序,我将每天运行(通过Windows Scheduler)。该计划是向我的团队发送每日报告。 我已经写了以下内容来发送电子邮件,它是有效的。唯一的问题是Outlook显示一个消息框“一个程序正试图代表您发送电子邮件。如果这是意外的……”。有三个按钮“允许”“拒绝”“帮助”,我的程序似乎在这一点上停止,直到我单击“允许”或“拒绝”按钮,程序才发送电子邮件。 我知道我可以通过进入工具->信任中心->编程访问来更改选项,但我真的不想使用它,因为此程序最终将从另一台计算机上运行,用户可以在

我有一个C#程序,我将每天运行(通过Windows Scheduler)。该计划是向我的团队发送每日报告。 我已经写了以下内容来发送电子邮件,它是有效的。唯一的问题是Outlook显示一个消息框“一个程序正试图代表您发送电子邮件。如果这是意外的……”。有三个按钮“允许”“拒绝”“帮助”,我的程序似乎在这一点上停止,直到我单击“允许”或“拒绝”按钮,程序才发送电子邮件。 我知道我可以通过进入工具->信任中心->编程访问来更改选项,但我真的不想使用它,因为此程序最终将从另一台计算机上运行,用户可以在信任中心中访问或不访问以更改设置。 有没有办法通过编程禁用此警告。。或者有没有其他方法可以在没有弹出警告的情况下发送电子邮件

这是用于发送电子邮件的代码。它工作正常

Application olook = new Application();
        NameSpace ns = olook.GetNamespace("MAPI");
        ns.Logon(null, null, true, true);

       _MailItem msg = (_MailItem)olook.CreateItem(OlItemType.olMailItem);

        msg.To = "xxx@xxx.com";
        msg.Subject = "test";

        msg.HTMLBody = strHTML;

        msg.Send();
        ns.Logoff();

有几种方法可以做到这一点 您可以禁用弹出窗口,如所述的@DJ KRAZE

或者,如果在您的环境中可能的话,您也可以通过smtp发送消息 见此:

然后你可以使用我使用过的“redemption library”,它不会有任何消息,因为redemption会抑制它们(或在它们周围工作),但是这个库是通过com使用的,这并不舒服。。 尽管你必须为此付费:

第三种选择是使用托管Exchange Web服务 这是非常直接和有趣的使用。您也可以通过NuGet获得此信息。:)

编辑:

我忘了提到,Exchange Web服务仅在Exchange 2007 SP1或更高版本上可用。 这就是发送消息(连接到服务器后)的外观


请查看此处的介绍:

最简单的解决方案之一是使用Exchange的SMTP服务器。这里有一个例子


当然,您必须与Exchange管理员联系以确保启用了SMTP。

我怀疑您是否可以禁用此功能。如果一个程序可以在用户不知情或未经其批准的情况下从用户的地址发送电子邮件,这将是一个重大的安全漏洞。这实际上与Exchange无关,而与Outlook安全性有关。
EmailMessage message = new EmailMessage(service);
message.Subject = "Hello from the EWS Managed API";
message.Body = "Now that's easy!";
message.ToRecipients.Add("someone@fabrikam.com");
message.Save();
string to = "jane@contoso.com";
string from = "ben@contoso.com";
MailMessage message = new MailMessage(from, to);
message.Subject = "Using the new SMTP client.";
message.Body = @"Using this new feature, you can send an e-mail message from an application very easily.";

SmtpClient client = new SmtpClient(server);
// Credentials are necessary if the server requires the client 
// to authenticate before it will send e-mail on the client's behalf.
client.UseDefaultCredentials = true;
client.Send(message);