错信息如下:System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets.SocketException: 由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。
想到阿里云喜欢用安全组屏蔽端口,于是我就赶紧去配置了安全规则。进站出站都配置了,结果还是不行,然后索性把防火墙也关了,依旧不行。经过一番折腾,发现阿里自带屏蔽25端口。简直尴尬,后来找了阿里的一些规则文档,发现需要申请开通屏蔽端口。但是经过咨询了阿里工作人员,发现现在已经不开放25端口,因为什么《互联网信息服务管理办法》、《中国互联网协会反垃圾邮件规范》均对垃圾邮件进行说明与管理规范。让我考虑SSL加密SMTP通过465端口进行发件。然后试了一波,发现465发送不了QQ邮件,尝试了587端口成功了。
/// <summary> /// 邮件发送辅助类 /// </summary> public class SendEmialHelper { private string ServerHost;//承载服务器 如smtp.qq.com public string serverhost { set { ServerHost = value; } } private Int32 Port;//端口 public Int32 port { set { Port = value; } } private string MailAddressFrom;//发信人邮箱 public string mailaddressfrom { set { MailAddressFrom = value; } } private string Psw;//密码 public string psw { set { Psw = value; } } private string MailAddressTo;//收信人邮箱 public string mailaddressto { set { MailAddressTo = value; } } private string Message;//邮件信息 public string message { set { Message = value; } } private string ShowName;//发送人显示名 public string showname { set { ShowName = value; } } private string MailTitle;//发送人显示名 public string mailtitle { set { MailTitle = value; } } SmtpClient smtpclient = null;//设置smtp协议 MailAddress MailAddress_from = null;//设置发信人的地址 密码 MailAddress MailAddress_to = null;//设置收信人的地址 MailMessage MailMessage = new MailMessage(); FileStream filestream = null;//附件文件流 /// <summary> /// 设置smtp服务器信息 /// </summary> /// <param name="ServerHost">smtp服务器名</param> /// <param name="port">端口号</param> private void setSmtpClient(string ServerHost, Int32 port) { smtpclient = new SmtpClient(); smtpclient.Host = ServerHost;//指定smtp服务名 smtpclient.Port = port;//指定端口号 smtpclient.Timeout = 0;//超时的时间 } /// <summary> /// 验证发件人信息 /// </summary> /// <param name="MailAddress">发件人地址</param> /// <param name="Psw">密码</param> private void setMailAddress_from(string MailAddress, string Psw) { //创建服务器认证 NetworkCredential networkcredential = new NetworkCredential(MailAddress, Psw); //实例化发件人地址 MailAddress_from = new System.Net.Mail.MailAddress(MailAddress, Psw); //指定发件人信息(邮箱地址和密码) smtpclient.Credentials = new System.Net.NetworkCredential(MailAddress_from.Address, Psw); } public void Sendmail() { //初始化smtp信息 try { setSmtpClient(ServerHost, Port); } catch (Exception err) { throw err; } //验证发件地址和密码 try { setMailAddress_from(MailAddressFrom, Psw); } catch (Exception err) { throw err; } try { MailAddress_to = new MailAddress(MailAddressTo); MailMessage.To.Add(MailAddress_to); } catch (Exception err) { throw err; } MailMessage.From = MailAddress_from; MailMessage.Subject = MailTitle; MailMessage.IsBodyHtml = true; MailMessage.SubjectEncoding = System.Text.Encoding.UTF8; MailMessage.Body = Message; MailMessage.BodyEncoding = System.Text.Encoding.UTF8; MailMessage.Attachments.Clear(); smtpclient.Send(MailMessage); } }