Visual Studio 2015中的代码
1我正在使用Mailkit最新版本(1.18.1.1)从我自己的电子邮件服务器发送电子邮件。
2电子邮件服务器具有自签名证书,该证书不受信任。
3我在代码中添加了以下两行,以忽略SERVER CERTIFICATE错误:
client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
client.CheckCertificateRevocation = false;
4但我的程序仍然崩溃。
5在电子邮件服务器日志中,它显示错误:
未知[xxx.xxx.xxx.xxx]的SSL_accept错误:连接重置 对等
我猜是因为服务器证书问题而来。因为在Wireshark捕获中,只要我获得SERVER证书,连接就会终止。
6我还在我的系统中安装了UNTRUSTED电子邮件服务器证书,但问题仍然存在。
8完整代码:
使用(var client = new SmtpClient(new ProtocolLogger(" logging.log")))
{
// For demo-purposes, accept all SSL certificates (in case the server supports STARTTLS)
client.ServerCertificateValidationCallback = (mysender, certificate, chain, sslPolicyErrors) => { return true; };
client.CheckCertificateRevocation = false;
client.Connect("xxx.com", 465, true);
// Note: since we don't have an OAuth2 token, disable
// the XOAUTH2 authentication mechanism.
client.AuthenticationMechanisms.Remove("XOAUTH2");
// Note: only needed if the SMTP server requires authentication
client.Authenticate("xxx@xxx.com","123456");
client.Send(message);
client.Disconnect(true);
}
答案 0 :(得分:1)
如果你控制连接的两端,你可能想先检查没有TLS的发送,以确保只在使用TLS时才会出现问题。
还尝试在没有wireshark,fiddler或其他中间嗅探器/代理的情况下运行,以确保以安全的方式到达服务器时没有问题。检查您的防病毒或Internet安全系统是否因为不受信任的证书而关闭了您的连接。
您可能希望确保的另一件事是您的客户端和服务器共享相同的协议:我知道旧的TLS和SSL协议已被弃用,因此客户端和服务器之间可能没有通用协议
您还可以尝试启用system.net跟踪(从.NET 2.0开始提供),看看是否从您获得的(非常详细的)日志中获得了更具体的信息: https://blogs.msdn.microsoft.com/dgorti/2005/09/18/using-system-net-tracing/
System.Net跟踪是 1)每个过程 2)显示线程 3)适用于SSL 4)用于环回。 5)您不需要重新编译代码
[编辑]
我的问题似乎有点过于宽泛,无法猜测问题,请尝试缩小问题范围。例如:
顺便说一句,SSPI似乎与受信任的安全问题有关,因此请仔细检查您是否未将服务器配置为仅接受受信任的用户..
[/编辑]
如果这还不够,我会尝试更新我的答案=)
HTH
答案 1 :(得分:0)
我的问题已经解决了。在CONNECT命令和APP(c#)开始工作之前,我在代码中添加了以下代码!
client.SslProtocols = System.Security.Authentication.SslProtocols.Tls11;