.NET Core使用MimeKit邮件发送

前言

.NET Core中使用 默认的MailMessage+SmtpClient 邮件发送不论是使用邮件配置的Token或者邮箱密码发送邮箱均提示邮件发送失败。
在CSDN中找到相关文档 是SSL/TLS协议问题导致。

原因

这个问题跟SSL/TLS的协议版本有关系,SSL演化到3.0之后还是不够安全,因此又出现了SSL的升级版TLS协议,由于建立连接时的区别又分别被称为显示SSL和隐式SSL。SSL/TLS协议通常是结对出现SSL/TLS,不过大家还是喜欢简称为SSL。

目前最新版本是TLS 1.3,其他可用版本是TLS 1.2和TLS 1.1,其中TLS1.1计划于2020年弃用

解决方案

放弃使用自带的MailMessage改为使用MimeKit
安装:NETCore.MailKit

.NET Core使用MimeKit邮件发送_第1张图片

实现源码

以下邮件发送密码存在两种情况:

  1. 发送邮箱密码根据不同邮箱可能是邮箱实际登录密码,
  2. 也可能是POP/IMAP/SMTP授权码;

.NET Core使用MimeKit邮件发送_第2张图片

var strHost = "邮件发送服务地址";
var strPort = 邮箱发送端口;
var sendEmail = "邮箱账号";
var sendPwd = "密码/授权码"; 

MimeMessage mailMessage = new MimeMessage();
mailMessage.From.Add(new MailboxAddress(sendEmail));
mailMessage.To.Add(new MailboxAddress(email));
mailMessage.Subject = emaiTitle;

BodyBuilder bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = emailbody;
//邮件主体内容
mailMessage.Body = bodyBuilder.ToMessageBody();
//指定smtp服务地址(根据发件人邮箱指定对应SMTP服务器地址)
using (var smtpClient = new SmtpClient())
{
    smtpClient.Connect(strHost, strPort, true);
    smtpClient.Authenticate(sendEmail, sendPwd);
    try
    {
        smtpClient.Send(mailMessage); //同步邮件发送
    }
    catch (Exception ex)
    {
        var error = _kitServices.IGetErrorMsg(ex, "邮件发送异常");
    }
    smtpClient.Disconnect(true);
    /* 异步执行
    await smtpClient.ConnectAsync(strHost, strPort, true);
    await smtpClient.AuthenticateAsync(sendEmail, sendPwd);
    try
       {
         await smtpClient.SendAsync(mailMessage); //同步邮件发送
      }
    catch (Exception ex)
    {
		var error = _kitServices.IGetErrorMsg(ex, "邮件发送异常");
    }
    await smtpClient.DisconnectAsync(true);
    */
}

你可能感兴趣的:(笔记,.net,c#)