测试可用的C# SMTP发送邮件代码

以下代码是经过测试,支持国内大部分邮件系统使用的SMTP发送邮件。

  public bool SendEmail(string mailTo, string mailSubject, string mailContent, out string message)
  {
    
    
    // 设置发送方的邮件信息,例如使用网易的smtp
    string smtpServer = "smtp.exmail.qq.com"; //SMTP服务器
    string mailFrom = "[email protected]"; //登陆用户名
    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.Web.Mail替代System.Net.Mail但System.Net.Mail.SmtpClient并不支持SSL/TLS1.3加密,而大部分国内的SMTP发件服务器都是用SSL/TLS1.3加密版本,导致邮件发送失败。
而System.Web.Mail.SmtpClient虽然已经过时,但他支持SSL/TLS1.3加密方法呀。
所以,这是一个微软的混乱版本管理实例。

猜你喜欢

转载自blog.csdn.net/qq_31042143/article/details/109102045