目录
本文是添加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;
}
案例如下