Volo.Abp.MailKit封裝繼承MailKit庫,為Abp郵件發送提供了快捷實作,
郵箱配置
qq郵箱支持smtp功能,需要去申請開通,參考qq郵箱設定,最重要的是smtp發送郵件,qq郵箱對應的密碼不是用戶的qq郵箱密碼,而是需要申請生成的授權碼,

在專案的appsettings.json組態檔里,添加如下配置專案,
"Settings": {
"Abp.Mailing.DefaultFromAddress": "[email protected]",
"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": "[email protected]",
"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;
}
}
}
官方參考檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/13521.html
標籤:.NET Core
上一篇:微服務中的網關
