前一阵子一个项目 部署到阿里云服务器上的时候 发邮件代码 (用的腾讯企业云邮箱的服务) 出了点问题。但在测试环境下(比较旧的阿里云服务器上)没有问题。然后排查问题发现 比较新的阿里云服务器上把25端口封了。申请解封也是一直提示申请失败,跟客服咨询,客户建议不要开25端口,建议启用465端口,还和我推销阿里云的企业云。。
然后我就去尝试使用465端口,改成了以下代码:
SmtpClient client = new SmtpClient(); client.Host = smtpUrl; //以下两句是之前没有的,默认端口是25,现在改成465端口启用SSL加密 client.Port = 465; client.EnableSsl = true; client.DeliveryMethod = SmtpDeliveryMethod.Network; client.UseDefaultCredentials = false; client.Credentials = new NetworkCredential(userName, passWord); client.Send("from@email.com", "to@email.com", "Subject", "Body");
然后再测试环境下测试,结果报以下异常:
System.Exception: cuowu:System.Net.Mail.SmtpException: 发送邮件失败。 ---> System.IO.IOException: 无法从传输连接中读取数据: net_io_connectionclosed。
在 System.Net.Mail.SmtpReplyReaderFactory.ProcessRead(Byte[] buffer, Int32 offset, Int32 read, Boolean readLine)
仔细检查了以下防火墙、腾讯企业云上的说明,都没什么问题,抓狂,继续在百度上毫无头绪的看看广大群众有什么解决办法。
无意中看到 这个端口疑问解答 发现还有个 587端口,直接把client.Port = 4随意试了一下竟然测试通过了,放到阿里云服务器上,开启一下端口安全规则就OK了。