C# SMTP发送邮件

        public static void SendEmail(SendMail M)
        {

            MailMessage myMail = new MailMessage();//发送电子邮件类

            foreach (string item in M.Addressee)//添加收件人
            {
                myMail.To.Add(item);
            }
            foreach (string item in M.CC)//添加抄送
            {
                myMail.CC.Add(item);

            }

            myMail.Subject = M.Theme;//邮件主题
            myMail.SubjectEncoding = M.SubjectEncoding;//邮件标题编码

            myMail.From = new MailAddress(M.From, M.DisplayName, M.SubjectEncoding);//发件信息

            myMail.Body = M.Body;//邮件内容
            myMail.BodyEncoding = M.BodyEncoding;//邮件内容编码
            myMail.IsBodyHtml = M.IsBodyHtml;//是否是HTML邮件

            SmtpClient smtp = new SmtpClient();//SMTP协议

            smtp.EnableSsl = M.EnableSsl;//是否使用SSL安全加密 使用QQ邮箱必选

            smtp.Host = M.Host;//主机

            smtp.Send(myMail);//发送

        }
Send Email
public class SendMail
    {
        public string From { get; set; }//发件人地址
        public string Password { get; set; }//密码
        public string[] Addressee { get; set; }//收件人地址
        public string[] CC { get; set; }//抄送
        public string Theme { get; set; }//主题
        public string DisplayName { get; set; }//发件人名称
        public Encoding SubjectEncoding { get; set; }//编码
        public string Body { get; set; }//邮件内容
        public Encoding BodyEncoding { get; set; }//邮件内容编码
        public bool IsBodyHtml { get; set; }//是否HTML邮件
        public MailPriority Priority { get; set; }//邮件优先级
        public bool EnableSsl { get; set; }//是否ssl
        public bool UseDefaultCredentials { get; set; }
        public string Host { get; set; }
    }
Model

 

遇到一个SSL的坑

本地测试没问题 IIS不行 最后发现是SSL/TLS的协议版本问题,直接用个原始的System.Web.Mail解决

通过System.Net.Mail.SmtpClient使用SSL / TLS协议发送邮件失败并报错
System.Net.Mail.SmtpException: Failure sending mail
这个问题跟SSL / TLS的协议版本有关系,SSL演化到3.0之后还是不够安全,因此又出现了SSL的升级版TLS协议,由于建立连接时的区别又分别被称为显示SSL和隐式SSL。SSL / TLS协议通常是结对出现SSL / TLS,不过大家还是喜欢简称为SSL。
所以,目前主流的邮箱服务商加密协议使用的都是TLS。
但是System.Net.Mail.SmtpClient 不支持较新的TLS协议
故使用System.Web.Mail; 发送

 MailMessage mmsg = new MailMessage();
            mmsg.Subject = M.Theme;
            mmsg.BodyFormat = MailFormat.Html;
            mmsg.Body = M.Body;
            mmsg.BodyEncoding = Encoding.UTF8;
            //优先级
            //mmsg.Priority = MailPriority.High;
            //发件者邮箱地址
            mmsg.From = M.From;
            string address = string.Empty;
            foreach (var item in M.Addressee)
            {
                address += item + ",";
            }
            address = address.Substring(0, address.Length - 1);
            //收件人收箱地址
            mmsg.To = address;
            mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
            //用户名
            mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", 域名/账号);
            //密码
            mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password);
            //端口 
            mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25);
            //使用SSL 
            mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
            //Smtp服务器
            SmtpMail.SmtpServer = M.Host;
            SmtpMail.Send(mmsg);
SSL Email

 

posted @ 2021-06-07 09:12  最爱吃汤圆27  阅读(123)  评论(0编辑  收藏  举报