用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
这个问题,请问怎么解决
ServicePointManager.ServerCertificateValidationCallback
试试看
要怎么用
@香槟6:
google一下这行代码,可以调试,可以忽略证书检查。理解了的知识才是自己的知识
@calvinK: 我问了下,我那代码是对的,只是放在虚拟机里会报错,放在外面就正常了
虚拟机是WinServer2003
@香槟6:虚拟机的证书验证不过去把
@calvinK: 嗯
@calvinK: 请问这是怎么回事,是什么原因让我在虚拟机的WinServer2013报验证证书有误
@香槟6:
不支持服务器的加密方式。具体错误发出来,你这样一句话,很难定位错误
@calvinK: SMTP 服务器要求安全连接或客户端未通过身份验证。 服务器响应为: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during MAIL FROM 就是这句
@香槟6:
客户端未通过身份验证,应该是这个问题。
ServicePointManager.ServerCertificateValidationCallback
下个断点看一下errors里面有什么
@calvinK: 就是断点测出这个问题
@calvinK: 但是是在虚拟机WinServer2003有这个问题,放在本机Win10就不会报错,测试成功
@香槟6: 看一下服务器ssl返回的协商的协议有哪些,然后看一下你虚拟机有哪些
@calvinK: 这个要怎么看啊,不懂
这个一般和你程序没关系了,要找邮件供应商授权或什么的
你也遇到过这问题?
@香槟6: 之前用163邮箱的时候有碰到类似的问题,直接用用户名密码是发不出去的,要用163分配的一个验证码才可以,各个邮件服务商多少有点差别的
@balahoho: 0ffice365用密码和用户名能发