C# SMTP发送邮件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);//发送 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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; } }
遇到一个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; 发送
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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);