以下代码是经过测试,支持国内大部分邮件系统使用的SMTP发送邮件。
public bool SendEmail(string mailTo, string mailSubject, string mailContent, out string message)
{
// 设置发送方的邮件信息,例如使用网易的smtp
string smtpServer = "smtp.exmail.qq.com"; //SMTP服务器
string mailFrom = "no-reply@creativestar.cn"; //登陆用户名
string userPassword = "xxxxxxxx";//登陆密码
message = string.Empty;
// 发送邮件设置
MailMessage mail = new MailMessage();
mail.Subject = mailSubject; //主题
mail.BodyFormat = MailFormat.Html;
mail.Body = System.IO.File.ReadAllText(Page.MapPath("mail.html"), System.Text.Encoding.UTF8).Replace("{0}", mailContent); //内容
mail.BodyEncoding = System.Text.Encoding.UTF8; //正文编码
mail.From = mailFrom;
mail.To = mailTo;
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", mailFrom);
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", userPassword);
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", "465");
mail.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
try
{
SmtpMail.SmtpServer = smtpServer;
SmtpMail.Send(mail);
return true;
}
catch (Exception ex)
{
message = ex.Message;
return false;
}
}
注意成功的引用库是System.Web.Mail
using System.Web.Mail;
而不是System.Net.Mail
using System.Net.Mail;
虽然VS编辑器提示System.Web.Mail已经过时,应该用System.Net.Mail替代。
但System.Net.Mail.SmtpClient并不支持SSL/TLS1.3加密,而大部分国内的SMTP发件服务器都是用SSL/TLS1.3加密版本,导致邮件发送失败。
而System.Web.Mail.SmtpClient虽然已经过时,但他支持SSL/TLS1.3加密方法呀。
所以,这是一个微软的混乱版本管理实例。