【问题标题】:Sending email via exchange server issue. (system.net.mail vs microsoft.exchange.webservices)通过交换服务器问题发送电子邮件。 (system.net.mail vs microsoft.exchange.webservices)
【发布时间】:2014-01-20 18:36:59
【问题描述】:

我正在为我的公司开发一个 Web 应用程序。其中一部分需要内部用户填写表格,并代表该用户发送电子邮件。这一切都在公司内部。我搜索并找到了两条可能的路由旧 system.net.mail 和更新的 microsoft.exchange.webservices,但似乎我们的交换服务器需要凭据。我只能获取用户的登录名和他的电子邮件地址 login+"@company.com"。我怎样才能做到这一点?

以下是我使用 smtp (system.net.mail) 的代码,但它不起作用。

            string[] username =System.Security.Principal.WindowsIdentity.GetCurrent().Name.Split('\\');
            string email = username[1] + "@company.com";
            MailAddress from = new MailAddress(email);
            MailAddress to = new MailAddress("someone@company.com");
            MailMessage message = new MailMessage(from, to);                
            message.Subject = "testmail";
            message.Body = "<h>testmail</h>";
            message.IsBodyHtml = true;
            SmtpClient client = new SmtpClient();
            client.DeliveryMethod = SmtpDeliveryMethod.Network;
            client.Send(message); 

【问题讨论】:

    标签: c# asp.net exchange-server


    【解决方案1】:

    SmtpClient 要求您直接指定 SMTP 服务器,或者您具有正确的应用程序/机器配置设置,以便它自动检测服务器。您的代码隐式选择了第二个选项,我怀疑您在应用程序/机器配置中没有正确的设置。 Exchange 在其默认配置 afaik 中不支持 SMTP,因此除非熟悉您的 Exchange 服务器的人知道 SMTP 已配置并且可以为您提供正确的地址,否则 SmtpClient 可能已退出。

    Exchange Web 服务(又名 EWS)可能是您更好的答案,但它并不是一个很好的答案。为了使用 Exchange 网络服务,您需要以下之一:

    1) 用户的域、用户名和密码,以便您可以将正确的 NetworkCredential 传递给 EWS。在您的情况下,这可能意味着用户必须在您的表单中输入他们的密码,这可能会破坏您的要求。

    2) 进程运行的用户(在 Web 应用程序中,IIS 的应用程序池标识)必须具有以相关用户身份发送邮件的权限。

    3) 如果您可以使用 ASP.NET 身份验证来模拟用户(这只是 LAN 应用程序中的好方法),那么您可以有效地回退到选项 (2),因为现在您将与EWS 作为用户,显然有权从自己的地址发送邮件。

    如您所见,正确的方法很大程度上取决于您的 Exchange/Active Directory/LAN 设置。

    【讨论】:

    • 嗨 Dana,您的评论很有帮助。我确实尝试设置 SMTP,如下所示 SmtpClient client = new SmtpClient("10.21.80.174"); client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = true;客户端.EnableSsl = true;但它仍然不起作用。知道为什么吗?
    • client.UseDefaultCredentials 将与 EWS 一样发送正在运行的进程/线程的凭据。因此,在 Web 应用程序中,默认情况下这将是一些非特权的 IIS 应用程序池标识,或者如果是这样配置的,则可能是服务帐户。无论哪种方式,发送到 SMTP 的都是该帐户。因此,与 EWS 一样,您要么必须提供 NetworkCredential(即密码),要么允许允许 IIS 身份通过 SMTP 发送。
    • 谢谢达娜。我认为它回答了我的问题。
    猜你喜欢
    • 2014-01-11
    • 2011-06-08
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多