当前位置: 首页 > 编程语言 > C#

使用SSLShare向GMail发送邮件时验证或解密失败

时间:2023-04-10 21:46:33 C#

使用SSL向GMail发送邮件时验证或解密失败我指的是关于C#SMTP邮件的这篇指南。这是我的代码:MailMessagemail=newMailMessage();SmtpClientSmtpServer=newSmtpClient("smtp.gmail.com");mail.From=newMailAddress("dave.stockinger@gmail.com");mail.To.Add("dave.stockinger@gmail.com");mail.Subject="测试邮件";mail.Body="这是为了测试来自GMAIL的SMTP邮件";SmtpServer.Port=587;SmtpServer.Credentials=newSystem.Net.NetworkCredential("MyUserNameInGmail","MyGmailPassWord");SmtpServer.EnableSsl=true;SmtpServer.Send(邮件);不幸的是,有一个关于SSL的异常,我无法修复它:Unhandledexception:System.Net.Mail.SmtpException:无法发送邮件。—>System.IO.IOException:认证或解密失败。—>System.InvalidOperationException:SSL身份验证错误:RemoteCertificateNotAvailable,RemoteCertificateChainErrorsatSystem.Net.Mail.SmtpClient.m__4(System.Objectsender,System.Security.Cryptography.X509Certificates.X509CertificateCertificate,System.Security.Cryptography.X509Certificate.X509Certificate.X5509Certificate.链接,SslPolicyErrorssslPolicyErrors)[0x00000]in:0atSystem.Net.Security.SslStream+c__AnonStorey7。m__A(System.Security.Cryptography.X509Certificates.X509Certificatecert,System.Int32[]certErrors)[0x00000]in:0在Mono.Security.Protocol.Tls.SslClientStream.OnRemoteCertificateValidation(System.Security.Cryptography.X509Certificates.X509Certificate,证书证书System.Int32[]错误)[0x00000]in:0在Mono.Security.Protocol.Tls.SslStreamBase.RaiseRemoteCertificateValidation(System.Security.Cryptography.X509Certificates.X509Certificate证书,System.Int32[]错误)[0x00000]in:在Mono.Security.Protocol.Tls.SslClientStream.RaiseServerCertificateValidation(System.Security.Cryptography.X509Certificates.X509Certificate证书,System.Int32[]certificateErrors)[0x00000]in:0atMono.Security.Protocol.Tls.Handshake.Client。TlsServerCertificate.validateCertificates(Mono.Security.X509.X509CertificateCollection证书)[0x00000]in:0atMono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1()[0x00000]in:0inMono.Security.Protocol.Tls.Handshake.Client.TlsServerCertificate.ProcessAsTls1()[0x00000]in:0inMono.Protocol.Protocol.Security.Tls.Handshake.HandshakeMessage.Process()[0x00000]in:0at(wrapperremoting-invoke-with-check)Mono.Security.Protocol.Tls.Handshake.HandshakeMessage:Process()atMono.Security.Protocol.Tls。ClientRecordProtocol.ProcessHandshakeMessage(Mono.Security.Protocol.Tls.TlsStreamhandMsg)[0x00000]in:0atMono.Security.Protocol.Tls.RecordProtocol.InternalReceiveRecordCallback(IAsyncResultasyncResult)[0x00000]in:0—内部异常堆栈跟踪—在Mono.Security.Protocol.Tls.SslStreamBase.AsyncHandshakeCallback(IAsyncResultasyncResult)[0x00000]in:0—内部异常堆跟踪绑定—在System.Net.Mail.SmtpClient.Send(System.Net.Mail.MailMessage消息)[0x00000]in:0在csharpdungeon.MainClass.Main()[0x00000]in:0正确的解决方案不是删除SSL证书validatiGMail上的证书有效。问题是Mono似乎找不到证书。由于很多原因,这是完全错误的,但主要是因为它删除了一个非常重要的证书验证:};正确的解决方案是在您的机器上安装证书:mozroots--import--ask-remove--machinecertmgr-sslsmtps://smtp.gmail.com:465这将有效地下载gmail证书,并使其可用在单声道。检查以下代码是否适合您;我已经在我的Gmail帐户上对其进行了测试,它似乎与我在ubuntu10.04LTS上运行的单声道2.0一起使用System;使用System.Net;使用System.Net.Mail;使用System.Net.Security;使用System.Security.Cryptography.X509Certificates;namespacemono_gmail{classMainClass{publicstaticvoidMain(string[]args){MailMessagemail=newMailMessage();mail.From=newMailAddress("my.name@gmail.com");mail.To.Add("my.name@hotmail.com");mail.Subject="测试邮件";mail.Body="这是为了测试来自GMAIL的SMTP邮件";SmtpClientsmtpServer=newSmtpClient("smtp.gmail.com");smtpServer.Port=587;smtpServer.Credentials=newSystem.Net.NetworkCredential("my.name","my.password");smtpServer.EnableSsl=true;ServicePointManager.ServerCertificateValidationCallback=delegate(objects,X509Certificatecertificate,X509Chainchain,SslPolicyErrorssslPolicyErrors){returntrue;};smtpServer.发送(邮件);在Mono可以看到的地方安装适当的证书颁发机构。有关解决此错误的步骤,请参阅Mono项目安全常见问题解答。如果您使用的是SSL而不是TLS,则需要端口465而不是587。请参阅http://mail.google.com/support/bin/answer.py?hl=en&answer=13287。您是否尝试更改端口,我知道SSL的默认SMTP端口是465通过Gmailcertmgr-sslsmtps://smtp.gmail.com:465为SmtpClient找到了另一个解决方案如果您运行的是单声道Web服务器,则运行使用与单声道进程相同的用户名的命令。您需要使用SSL安全发送吗?可以去掉这条语句SmtpServer.EnableSsl=true;这不需要SSL证书。以上是C#学习教程:使用SSL向GMail发送邮件时,认证或解密失败,共享所有内容。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: