1. 首页>
  2. 技术文章>
  3. 阿里云发送SMTP邮件失败

阿里云发送SMTP邮件失败

7/21/20 10:41:02 AM 浏览 1201 评论 0

smtp

错信息如下: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);
        }
    }


网友讨论