【问题标题】:SmtpException when Sending Mail in ASP.NET在 ASP.NET 中发送邮件时出现 SmtpException
【发布时间】:2014-12-08 15:06:48
【问题描述】:

我尝试使用一些代码从我的 ASP.NET MVC 5 网站发送电子邮件。从我读过的内容来看,我这样做是正确的,并且代码是正确的

public static Task SendEmailAsync(IEnumerable<string> to, 
    IEnumerable<string> cc, string body)
{
    if (to == null || to.Count() == 0)
        return null;
    if (String.IsNullOrEmpty(body))
        throw new ArgumentNullException("body of the email is empty");

    // Send email.
    return Task.Factory.StartNew(() =>
        {
            // Client setup.
            using (SmtpClient smtpClient = new SmtpClient("smtp.servername.com", 25)) // Tried 587 too.
            {
                smtpClient.Credentials = new System.Net.NetworkCredential()
                {
                    UserName = Constants.AdminEmailAddress,
                    Password = Constants.AdminPwd
                };
                smtpClient.UseDefaultCredentials = true;
                smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                smtpClient.EnableSsl = true;

                // Mail message.
                using (MailMessage mail = new MailMessage())
                {
                    mail.Body = body;
                    mail.From = new MailAddress(Constants.AdminEmailAddress, "Business Name Here");
                    foreach (var a in to)
                        mail.To.Add(new MailAddress(a));
                    if (cc != null)
                        foreach (var a in cc)
                            mail.CC.Add(new MailAddress(a));
                    smtpClient.Send(mail); // Here I get exception.
                }
            }
        });
}

但是在上面标记的那一行我得到了

System.Net.Mail.SmtpException: Unable to connect to the remote server 连接尝试失败,因为连接的一方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应 NNN.NNN .NNN.NNN:嗯

我明白这清楚地表明客户端无法连接,但这些细节与我用来从 Microsoft Outlook 发送电子邮件的细节完全相同,并且有效。

为什么我无法使用这些凭据连接到邮件服务器,我错过了什么?

我知道我可能需要联系邮件服务提供商并请求许可,但这是我第一次尝试此操作,我想澄清一下该怎么做。我查看了提供邮件服务的 mandrillapp.com,这是一个不错的选择,有人可以建议吗?

感谢您的宝贵时间。


注意,我已阅读

  1. How to send email from Asp.net Mvc-3?
  2. http://www.c-sharpcorner.com/UploadFile/sourabh_mishra1/sending-an-e-mail-using-Asp-Net-mvc/
  3. send email from MVC 4 ASP.NET app

更新

按照下面@Dave Zych 的非常有用的建议,我删除了SmtpException,但我现在有System.Security.Authentication.AuthenticationException 说“根据验证程序,远程证书无效。”。所以我在同一条船上,仍然无法发送电子邮件。

【问题讨论】:

  • 关于远程证书,它是否作为可信证书添加到您的计算机中?
  • 不,我对此完全陌生,所以我不知道要求以及如何执行此操作。我在哪里可以获得证书?我确信一旦获得证书,我就可以确定如何添加它...感谢您的评论。

标签: c# asp.net-mvc email asp.net-mvc-5


【解决方案1】:

不要指定UseDefaultCredentials(或将其设置为false)。这会导致它使用当前登录用户的凭据,而不是您在Credentials 属性中设置的凭据。

来自MSDN

某些 SMTP 服务器要求在服务器代表客户端发送电子邮件之前对客户端进行身份验证。如果服务器请求此 SmtpClient 对象应使用当前登录用户的默认凭据进行身份验证,则将此属性设置为 true。对于客户端应用程序,这是大多数情况下所需的行为。

...

如果 UseDefaultCredentials 属性设置为 false,则 Credentials 属性中设置的值将用于连接到服务器时的凭据。如果 UseDefaultCredentials 属性设置为 false 并且尚未设置 Credentials 属性,则邮件将匿名发送到服务器。

【讨论】:

  • 不幸的是,这没有帮助。以完全相同的消息引发相同的异常...
  • @Killercam 您是否将其设置为false 或删除该行?如果您将其设置为 false,请尝试删除该行,这实际上可能会使其正常工作,原因我将解释它是否有效。
  • 好的,这行得通,但现在在同一行我有一个System.Security.Authentication.AuthenticationException 说“根据验证程序,远程证书无效。”。现在略有不同的问题,但仍然可以发送邮件...
  • 我已经稍微更新了问题以包含此更改。非常感谢您的时间和帮助,非常感谢。
  • 这里解释了删除行的原因:stackoverflow.com/questions/12167381/…
猜你喜欢
  • 2015-09-13
  • 2013-08-27
  • 1970-01-01
  • 2016-08-07
  • 2011-02-08
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多