【后端】.NET Core API框架搭建(10) --配置163邮件发送服务
目录
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;
}
案例如下