【后端】.NET Core API框架搭建(10) --配置163邮件发送服务

发布于:2025-07-19 ⋅ 阅读:(9) ⋅ 点赞:(0)

目录

1.添加包

2.添加模型

3.添加邮件发送类

4.发送邮件

5.展示

        5.1.已发邮件

        5.2.接收邮件 


   本文是添加MailKit 处理库发送163邮件,MailKit 是一个功能强大且灵活的邮件处理库,支持IMAP, POP3和SMTP协议。以下是一个简单的指南,展示如何使用 MailKit 发送电子邮件。

1.添加包

        添加 MailKit 的NuGet管理包。

2.添加模型

        添加发送邮件模型。

namespace Frame4_LibraryCore.Email
{
    /// <summary>
    /// 发送邮件模型
    /// </summary>
    public class EmailModel
    {
        /// <summary>
        /// 邮件地址
        /// </summary>
        public string EmailAddress { get; set; }

        /// <summary>
        /// 标题
        /// </summary>
        public string Title { get; set; }

        /// <summary>
        /// 内容
        /// </summary>
        public string Content { get; set; }

    }
}

        案例如下

3.添加邮件发送类

        邮件发送帮助类(基于SMTP协议),使用MailKit库实现邮件发送功能。

using Frame5_LibraryLogger.LogHelper;
using MailKit.Net.Smtp;
using MimeKit;

namespace Frame4_LibraryCore.Email
{
    /// <summary>
    /// 邮件发送帮助类(基于SMTP协议)
    /// 使用MailKit库实现邮件发送功能
    /// </summary>
    public static class EmailHelper
    {
        //SMTP服务器配置常量(163邮箱示例)
        /// <summary>
        /// SMTP服务器地址
        /// </summary>
        private const string SmtpHost = "smtp.163.com";
        /// <summary>
        /// SSL加密端口
        /// </summary>
        private const int SmtpPort = 465;
        /// <summary>
        /// 启用SSL加密
        /// </summary>
        private const bool UseSsl = true;
        /// <summary>
        /// 发件邮箱
        /// </summary>
        private const string SenderEmail = "你的邮件地址";
        /// <summary>
        /// 发件人显示名称
        /// </summary>
        private const string SenderName = "系统发送邮件";
        /// <summary>
        /// 邮箱授权码(非登录密码)
        /// </summary>
        private const string AuthPassword = "你的授权码(不知道怎么获取的百度)";

        /// <summary>
        /// 异步发送邮件
        /// </summary>
        /// <param name="model">邮件数据模型</param>
        /// <returns>发送成功返回true,失败返回false</returns>
        public static async Task<bool> EmailSendAsync(EmailModel model)
        {
            // 参数有效性检查
            if (model == null || string.IsNullOrWhiteSpace(model.EmailAddress))
            {
                LogHelper.Warn("邮件发送失败: 参数无效");
                return false;
            }

            try
            {
                // 创建MIME格式邮件消息
                var message = CreateEmailMessage(model);

                // 创建并配置SMTP客户端
                using var client = new SmtpClient();

                // 连接SMTP服务器(异步)
                await client.ConnectAsync(SmtpHost, SmtpPort, UseSsl);

                // 使用账号密码认证(异步)
                await client.AuthenticateAsync(SenderEmail, AuthPassword);

                // 发送邮件(异步)
                await client.SendAsync(message);

                // 记录发送成功日志
                LogHelper.Info($"邮件发送成功,\r\n收件人:{model.EmailAddress},\r\n标题:{model.Title},\r\n内容:{model.Content}");
                return true;
            }
            catch (Exception ex)
            {
                // 记录发送失败日志
                LogHelper.Error($"邮件发送失败: {ex.Message}");
                return false;
            }
        }

        /// <summary>
        /// 构建MIME邮件消息
        /// </summary>
        /// <param name="model">邮件数据</param>
        /// <returns>构建好的MimeMessage对象</returns>
        private static MimeMessage CreateEmailMessage(EmailModel model)
        {
            var message = new MimeMessage();

            // 设置发件人信息
            message.From.Add(new MailboxAddress(SenderName, SenderEmail));

            // 设置收件人信息
            message.To.Add(new MailboxAddress(model.EmailAddress, model.EmailAddress));

            // 设置邮件主题
            message.Subject = model.Title;

            // 构建邮件正文
            var bodyBuilder = new BodyBuilder
            {
                TextBody = model.Content, // 纯文本内容
                                          // HtmlBody = "" 可在此添加HTML内容
            };

            // 添加附件示例:
            // if(model.Attachments != null) 
            // {
            //     foreach(var file in model.Attachments)
            //     {
            //         bodyBuilder.Attachments.Add(file);
            //     }
            // }

            message.Body = bodyBuilder.ToMessageBody();
            return message;
        }
    }
}

        案例如下

4.发送邮件

        直接调用邮件发送类

/// <summary>
/// 测试邮件发送
/// </summary>
/// <returns></returns>
[HttpGet]
public async Task<bool> Emallsend()
{
    var model = new EmailModel()
    {
        EmailAddress = "1820769892@qq.com",
        Title = "测试接口",
        Content = $"当前时间为:{DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}",
    };
    var iRet = await EmailHelper.EmailSendAsync(model);
    return iRet;
}

        案例如下

5.展示

        5.1.已发邮件

        5.2.接收邮件 


网站公告

今日签到

点亮在社区的每一天
去签到