首页 新闻 会员 周边

使用.net里的邮箱发送报无法验证证书签名

0
悬赏园豆:50 [已解决问题] 解决于 2016-09-09 16:52

用139邮箱测试成功,有office365邮箱测试报

msg.From = new MailAddress(from, fromname, System.Text.Encoding.UTF8);
/* 上面3个参数分别是发件人地址(可以随便写),发件人姓名,编码*/
msg.Subject = "这是测试邮件";//邮件标题
msg.SubjectEncoding = System.Text.Encoding.UTF8;//邮件标题编码
msg.Body = "邮件内容";//邮件内容
msg.BodyEncoding = System.Text.Encoding.UTF8;//邮件内容编码
msg.IsBodyHtml = true;//是否是HTML邮件
msg.Priority = MailPriority.High;//邮件优先级
SmtpClient client = new SmtpClient();
client.Credentials = new System.Net.NetworkCredential(username, password);
//上述写你的GMail邮箱和密码
client.Port = 587;//Gmail使用的端口
client.Host = server;
client.EnableSsl = true;//经过ssl加密
object userState = msg;
try
{
//client.SendAsync(msg, userState);
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
// client.SendAsync(msg, userState);
//简单一点儿可以
client.Send(msg);
return "send ok";
}
catch (System.Net.Mail.SmtpException ex)
{
return ex.Message;
}

 

if ((SslPolicyErrors.RemoteCertificateChainErrors & sslPolicyErrors) == SslPolicyErrors.RemoteCertificateChainErrors)
{
string msg = "";
foreach (X509ChainStatus status in chain.ChainStatus)
{
msg += "status code ={0} " + status.Status;  报NotSignatureValid
msg += "Status info = " + status.StatusInformation + " "; 报无法验证证书的签名
}
MessageBox.Show("证书链错误:"+ msg);  

最后仔细查了下原来是

SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM

这个问题,请问怎么解决

 

北辰炎斌的主页 北辰炎斌 | 初学一级 | 园豆:95
提问于:2016-09-01 17:53
< >
分享
最佳答案
0

ServicePointManager.ServerCertificateValidationCallback

试试看

收获园豆:50
czd890 | 专家六级 |园豆:14412 | 2016-09-02 00:07

要怎么用

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-02 08:38

@香槟6: 

google一下这行代码,可以调试,可以忽略证书检查。理解了的知识才是自己的知识

czd890 | 园豆:14412 (专家六级) | 2016-09-02 10:17

@calvinK: 我问了下,我那代码是对的,只是放在虚拟机里会报错,放在外面就正常了

虚拟机是WinServer2003

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-02 10:33

@香槟6:虚拟机的证书验证不过去把

czd890 | 园豆:14412 (专家六级) | 2016-09-02 14:34

@calvinK: 嗯

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-02 15:53

@calvinK: 请问这是怎么回事,是什么原因让我在虚拟机的WinServer2013报验证证书有误

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-05 09:15

@香槟6: 

不支持服务器的加密方式。具体错误发出来,你这样一句话,很难定位错误

czd890 | 园豆:14412 (专家六级) | 2016-09-05 13:19

@calvinK: SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM 就是这句

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-05 13:51

@香槟6: 

客户端未通过身份验证,应该是这个问题。

ServicePointManager.ServerCertificateValidationCallback

下个断点看一下errors里面有什么

czd890 | 园豆:14412 (专家六级) | 2016-09-05 15:46

@calvinK: 就是断点测出这个问题

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-05 15:47

@calvinK: 但是是在虚拟机WinServer2003有这个问题,放在本机Win10就不会报错,测试成功

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-05 15:48

@香槟6: 看一下服务器ssl返回的协商的协议有哪些,然后看一下你虚拟机有哪些

czd890 | 园豆:14412 (专家六级) | 2016-09-05 18:33

@calvinK: 这个要怎么看啊,不懂

北辰炎斌 | 园豆:95 (初学一级) | 2016-09-06 09:04
其他回答(1)
0

这个一般和你程序没关系了,要找邮件供应商授权或什么的

balahoho | 园豆:2050 (老鸟四级) | 2016-09-01 19:57

你也遇到过这问题?

 

支持(0) 反对(0) 北辰炎斌 | 园豆:95 (初学一级) | 2016-09-02 08:39

@香槟6: 之前用163邮箱的时候有碰到类似的问题,直接用用户名密码是发不出去的,要用163分配的一个验证码才可以,各个邮件服务商多少有点差别的

支持(0) 反对(0) balahoho | 园豆:2050 (老鸟四级) | 2016-09-02 09:46

@balahoho: 0ffice365用密码和用户名能发

支持(0) 反对(0) 北辰炎斌 | 园豆:95 (初学一级) | 2016-09-02 10:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册