以前官方自带一个smpt类可以发送邮件,现在好像弃用了。虽然仍然可以使用,但总归不如先学一下新的方法。遂采用了微软官方推荐的一个第三方库:MailKit  

还需引入另一个MimeKit库,用于创建消息。

我的发送邮件是扩展功能,所以是静态方法,所需的参数我将通过参数传递。遂定义一个email的实体类、

    public class SendEmailDTO
    {
        /// <summary>
        /// 发送人邮箱
        /// </summary>
        public string FromEmail { get; set; }

        /// <summary>
        /// 收件人邮箱
        /// </summary>
        public string ToEmail { get; set; }

        /// <summary>
        /// 发送人
        /// </summary>
        public string FromUserName { get; set; }

        /// <summary>
        /// 收件人
        /// </summary>
        public string ToUserName { get; set; }

        /// <summary>
        /// 主题
        /// </summary>

        public string Subject { get; set; }

        /// <summary>
        /// 消息
        /// </summary>
        public string Text { get; set; }

        /// <summary>
        /// 邮箱服务器
        /// </summary>

        public string Host { get; set; }

        /// <summary>
        /// 端口[465加密,25不加密]
        /// </summary>
        public int Port { get; set; }

        /// <summary>
        /// 发送邮箱授权码
        /// </summary>

        public string Code { get; set; }
    }
View Code

然后就是发送邮件的方法

        public static void Send(SendEmailDTO dto)
        {
            #region Mime消息体

            MimeMessage mime = new();
            //发送者邮箱
            mime.From.Add(new MailboxAddress(dto.FromUserName, dto.FromEmail));
            //接收者邮箱
            mime.To.Add(new MailboxAddress(dto.ToUserName, dto.ToEmail));
            //邮件主体
            mime.Subject = dto.Subject;
            //邮件消息的主体,可以html,目前只是txt
            mime.Body = new TextPart(MimeKit.Text.TextFormat.Plain)
            {
                Text = dto.Text
            };

            #endregion Mime消息体

            #region 发送

            //创建smtp实例: SmtpClient 是一个用于与 SMTP 服务器进行交互的类
            using SmtpClient client = new();
            //与smpt服务器建立连接
            client.Connect(dto.Host, dto.Port, dto.Port == 465);
            //使用提供的凭证进行身份验证
            client.Authenticate(dto.FromEmail, dto.Code);
            //发送信息
            client.Send(mime);
            //关闭连接
            client.Dispose();

            #endregion 发送
        }
View Code

调用也很方便

SendEmail.Send(new Model.EntityDTO.SendEmailDTO()
            {
                FromEmail = "163@163.com",
                FromUserName = "野原新之助",
                Host = "smtp.163.com",
                Port = 465,
                Subject = "打个招呼",
                Text = @"你赖东东 
                                不错嘛!",
                ToEmail = "qq@qq.com",
                ToUserName = "小王"
            });
View Code

 

posted on 2023-08-16 21:59  尝尝手指  阅读(76)  评论(0编辑  收藏  举报