ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效

Posted

技术标签:

【中文标题】ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效【英文标题】:ASP.Net MVC 5 Sending Email error: The remote certificate is invalid according to the validation procedure 【发布时间】:2016-04-20 07:42:38 【问题描述】:

我有一个 ASP.Net MVC 5 应用程序,当我发送电子邮件时出现以下错误:

远程证书根据验证无效 过程。

描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。

异常详情: System.Security.Authentication.AuthenticationException:远程 根据验证程序,证书无效。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[AuthenticationException: 远程证书无效根据 到验证程序。] System.Net.Mail.ConnectAndHandshakeAsyncResult.End(IAsyncResult 结果)+113 System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult 结果)+61

[SmtpException: 发送邮件失败。] System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+144 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)+84 VRM5.Controllers.d__5.MoveNext() 在 C:\Users\mehdi\Documents\Visual Studio 2015\Projects\VRM5\VRM5\Controllers\VRsController.cs:289 System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(任务 任务)+144 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)+84 System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult 异步结果)+143 System.Web.Mvc.Async.c__DisplayClass37.b__36(IAsyncResult asyncResult) +23 System.Web.Mvc.Async.AsyncInvocationWithFilters.b__3d() +112 System.Web.Mvc.Async.c__DisplayClass46.b__3f() +452 System.Web.Mvc.Async.c__DisplayClass33.b__32(IAsyncResult asyncResult) +15 System.Web.Mvc.Async.c__DisplayClass2b.b__1c() +37 System.Web.Mvc.Async.c__DisplayClass21.b__1e(IAsyncResult 异步结果)+241 System.Web.Mvc.Controller.b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult 异步结果)+111 System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult 异步结果)+19 System.Web.Mvc.MvcHandler.b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +51 System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult 异步结果)+111 System.Web.CallHandlerExecutionStep.OnAsyncHandlerCompletion(IAsyncResult ar) +195

我的电子邮件发送代码:

var message = new MailMessage();
//-----Send Email------------------------------------------//
message.To.Add(new MailAddress(Q_contacts.ContactEmail));  // replace with valid value 
if(CheckAD==1)

    message.CC.Add(new MailAddress( mehdi@hotmail.com"));


message.From = new MailAddress(vR.Email);  // replace with valid value
message.Subject = "Vehicle Request -"+vR.Distination;
//message.Body = string.Format(body, model.FromName, model.FromEmail, model.Message);
message.Body = MS_1;
message.IsBodyhtml = true;

using (var smtp = new SmtpClient())

    var credential = new NetworkCredential
    
        UserName = "mehdi@abc.org",  // replace with valid value
        Password = "Abc@abc123"  // replace with valid value
    ;
    smtp.Credentials = credential;
    smtp.Host = "mr09.hv.abc.org";
    smtp.Port = 25;
    smtp.EnableSsl = false;
    await smtp.SendMailAsync(message);
    return RedirectToAction("Index");

【问题讨论】:

错误消息的 google 提供了一个in depth walk though of how to troubleshoot this problem。听起来你也需要 EnableSsl。 不,它不能解决我的问题 我已经查看了这个博客 【参考方案1】:

您在此处看到的问题与用于远程电子邮件环境提供的 SMTP 服务的 SSL 证书有关。

要检查 SSL 证书,您可以通过以下方式使用 openSSL:

openssl s_client -connect exchange01.int.contoso.com:25 -starttls smtp

根据您的情况,多种解决方案可能适用于此处(请参阅here 了解更多信息):

主机名不在 SSL 证书中。然后必须重新配置远程邮件服务器。 远程邮件服务器仍使用自签名证书。你可以尝试在你的服务器上导入它(见上面的链接)。 此处使用的某些 SSL 证书已过时。然后必须重新配置远程邮件服务器。 认证链中的某些部分不受信任。要解决此问题,您需要将它们导入服务器上受信任的 SSL 存储(参见上面的链接)。

【讨论】:

以上是关于ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET MVC 5、ASP.NET Core MVC 5 有啥区别?

解读ASP.NET 5 & MVC6系列:ASP.NET 5简介

备忘ASP.NET MVC 5 升级到 ASP.NET Core MVC 的部分变化

解读ASP.NET 5 & MVC6系列

ASP.NET 5 简介 MVC

VS 2015 ASP.NET 4 MVC 5 中的打字稿 - 设置和选择的工作组合是啥?