发邮件 带有internal_ABP邮件发送

ABP  Vnext发邮件要使用AbpMailKitModule的实现IEmailSender

它使用Setting里面的配置,在官方已经配置如下

internal class EmailSettingProvider : SettingDefinitionProvider

{

public override void Define(ISettingDefinitionContext context)

{

context.Add(

new SettingDefinition(EmailSettingNames.Smtp.Host, "127.0.0.1"),

new SettingDefinition(EmailSettingNames.Smtp.Port, "25"),

new SettingDefinition(EmailSettingNames.Smtp.UserName),

new SettingDefinition(EmailSettingNames.Smtp.Password, isEncrypted: true),

new SettingDefinition(EmailSettingNames.Smtp.Domain),

new SettingDefinition(EmailSettingNames.Smtp.EnableSsl, "false"),

new SettingDefinition(EmailSettingNames.Smtp.UseDefaultCredentials, "true"),

new SettingDefinition(EmailSettingNames.DefaultFromAddress, "noreply@abp.io"),

new SettingDefinition(EmailSettingNames.DefaultFromDisplayName, "ABP application")

);

}

}

默认配置是不合适,如果需要自己配置,则需要在选择合适SettingProvider,在官方提供了五种方法,它使用的倒序的做的法,先

User>Tenant>Global>Configuration>Default

Configure(options =>

{

options.ValueProviders.Add();

options.ValueProviders.Add();

options.ValueProviders.Add();

options.ValueProviders.Add();

options.ValueProviders.Add();

});

其中前面三种是User>Tenant>Global是使用 ISettingStore,因此我们可以引入ef core与sqlserver做存储,引入下面模块

[DependsOn(

typeof(AbpAutofacModule),

typeof(AbpMailKitModule),

typeof(AbpSettingManagementDomainModule),

typeof(AbpSettingManagementEntityFrameworkCoreModule),

typeof(AbpEntityFrameworkCoreSqlServerModule)

)]

基中AbpSettingManagementDomainModule,用来管理setting的,我们使用全局的,在providerName使用G,providerKey使用空

另外可以写一个IDataSeedContributor,用来写入种子数据,特别注意的是UseDefaultCredentials要使用false,即启用密码认证

await _settingManager.SetAsync(EmailSettingNames.Smtp.Host, "smtp.163.com", "G", "");即

await _settingManager.SetAsync(EmailSettingNames.Smtp.UserName, "***", "G", "");

await _settingManager.SetAsync(EmailSettingNames.Smtp.Password, "***", "G", "");

await _settingManager.SetAsync(EmailSettingNames.DefaultFromAddress, "***", "G", "");

await _settingManager.SetAsync(EmailSettingNames.DefaultFromDisplayName, "***", "G", "");

await _settingManager.SetAsync(EmailSettingNames.Smtp.EnableSsl, "true", "G", "");

await _settingManager.SetAsync(EmailSettingNames.Smtp.Port, "465", "G", "");

await _settingManager.SetAsync(EmailSettingNames.Smtp.UseDefaultCredentials, "false", "G", "");

后使用 IEmailSender _emailsender就可以正常发邮件了

邮件发送需要模板,那么模板又有多个语言版本,或者一个模板通过本地化进行语言的翻译。

ABP是这样设计,它首先进行邮件模板EmailTemplateDefinition定义,它是相当邮板组装的元数据metadata,邮件的头部,它内容有名称,是否是模板 (若不是,由AbpEmailTemplateOptions提供DefaultLayout),它的模板内容定义在EmailTemplateContributorList里面,它存在多个语言版本的,它还有一些其它增强属性的。

而EmailTemplate才是完全的内容,它包括有模板定义,以及邮件内容(要不要设置模板,将模板里的{{#content}})替换成内容

AbpEmailTemplateOptions存储着所有模板提供者列表,怎么样让自定义的模板放在AbpEmailTemplateOptions,并通过IEmailTemplateDefinitionManager进行管理,它的操作又是怎么样的

它在IEmailTemplateDefinitionProvider进行定义,由IEmailTemplateDefinitionManager进行填充,保存在其列表中,要提供查询

操作步骤,由IEmailTemplateProvider获取模板内容(这个类比较重要,调用IEmailTemplateDefinitionManager,ITemplateLocalizer,IStringLocalizerFactory,

AbpEmailTemplateOptions)获取到模板内容,再由ITemplateRender 渲染

其定义

EmailTemplateDefinition:占位符,名字,是否模板,本地化,贡献者列表

IEmailTemplateDefinitionProvider:邮件模版定义提供者 :Define方法,新增模板到邮件模板定义的上下文里面。(即上下文

有多少个模板)模板定义有个add方法提供添加到贡献者列表

IEmailTemplateContributor:邮件模版贡献者: 基于模板初始化上下文进行 Initialize。

它是利用IVirtualFileProvider提供的模板,它有一个,也可以是多语言的

IEmailTemplateDefinitionManager:邮件模版定义管理者:执行提供者的Define方法填充字典,以便获取一个模板定义,所有模板定义列表

EmailTemplateDefinitionContext: Dictionary

EmailTemplateInitializationContext:邮件定义EmailTemplateDefinition以及IServiceProvider

IEmailTemplateProvider方法

ITemplateRender 模板渲染

IEmailTemplateProvider:获取模板

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值