使用Volo.Abp.MailKit发送邮件
Volo.Abp.MailKit封装继承MailKit库,为Abp邮件发送提供了快捷实现。
邮箱配置
qq邮箱支持smtp功能,需要去申请开通。参考qq邮箱设置,最重要的是smtp发送邮件,qq邮箱对应的密码不是用户的qq邮箱密码,而是需要申请生成的授权码。
在项目的appsettings.json配置文件里,添加如下配置项目。
"Settings": {
"Abp.Mailing.DefaultFromAddress": "xx@qq.com",
"Abp.Mailing.DefaultFromDisplayName": "xx",
"Abp.Mailing.Smtp.Host": "smtp.qq.com",
"Abp.Mailing.Smtp.Port": "587",
"Abp.Mailing.Smtp.Domain": "smtp.qq.com",
"Abp.Mailing.Smtp.UserName": "xx@qq.com",
"Abp.Mailing.Smtp.Password": "xxx",
"Abp.Mailing.Smtp.EnableSsl": "false",
"Abp.Mailing.Smtp.UseDefaultCredentials": "false"
}
注意
-
Abp.Mailing.Smtp.EnableSsl项目应设置为false。
-
Abp.Mailing.Smtp.UseDefaultCredentials项目应设置为false。
-
Abp.Mailing.Smtp.Password应设置为qq邮箱对应的授权码密文。
密文可调用IStringEncryptionService.Encrypt(授权码)获取
发送邮件
在一个后台作业里发送邮件,完整代码如下。
public class EmailSendingJob : BackgroundJob<EmailSendingArgs>, ITransientDependency
{
private readonly IMailKitSmtpEmailSender _emailSender;
public EmailSendingJob(IMailKitSmtpEmailSender emailSender)
{
_emailSender = emailSender;
}
public override void Execute(EmailSendingArgs args)
{
Action action = async () =>
{
await _emailSender.SendAsync(
args.EmailAddress,
args.Subject,
args.Body,
false
);
};
action?.Invoke();
}
}
看看测试效果,邮件正确的发送接收了。
配置邮箱密码使用明文
框架默认EmailSettingProvider设置EmailSettingNames.Smtp.Password的isEncrypted属性默认为true,所以在上面的appsettings.json中需要设置为授权码的密文。
根据官方的文档,我们可以修改EmailSettingNames.Smtp.Password的isEncrypted属性默认为false,这样就可以直接使用授权码明文。
在项目中新建一个MySettingDefinitionProvider文件,并继承自SettingDefinitionProvider类。
public class MySettingDefinitionProvider : SettingDefinitionProvider
{
public override void Define(ISettingDefinitionContext context)
{
var smtpPassword = context.GetOrNull("Abp.Mailing.Smtp.Password");
if (smtpPassword != null)
{
smtpPassword.IsEncrypted = false;
}
}
}
分类:
abp
标签:
netcore发送邮件
, abp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?