ABP邮件发送
ABP Vnext发邮件要使用AbpMailKitModule的实现IEmailSender,要检查添加了Volo.Abp.MailKit,其dependon 要添加typeof()
它使用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<AbpSettingOptions>(options =>
{
options.ValueProviders.Add<DefaultValueSettingValueProvider>();
options.ValueProviders.Add<ConfigurationSettingValueProvider>();
options.ValueProviders.Add<GlobalSettingValueProvider>();
options.ValueProviders.Add<TenantSettingValueProvider>();
options.ValueProviders.Add<UserSettingValueProvider>();
});

其中前面三种是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<string, EmailTemplateDefinition>
EmailTemplateInitializationContext:邮件定义EmailTemplateDefinition以及IServiceProvider
IEmailTemplateProvider方法
ITemplateRender 模板渲染
IEmailTemplateProvider:获取模板
ABP邮件发送的更多相关文章
- 循序渐进BootstrapVue,开发公司门户网站(3)--- 结合邮件发送,收集用户反馈信息
在我们公司门户网站里面,如果有需要,我们可以提供一个页面给用户反馈信息,以便获得宝贵的用户信息反馈或者一些产品咨询的记录,一般这个结合邮件发送到负责人的邮箱即可.本篇随笔结合后端发送邮件的操作,把相关 ...
- 结合ABP源码实现邮件发送功能
1. 前言 2. 实现过程 1. 代码图(重) 2.具体实现 2.1 定义AppSettingNames及AppSettingProvider 2.2 EmailSenderConfiguration ...
- ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)
Introduction Email sending is a pretty common task for almost every application. ASP.NET Boilerplate ...
- 循序渐进VUE+Element 前端应用开发(33)--- 邮件参数配置和模板邮件发送处理
在系统处理中,有时候需要发送邮件通知用户,如新增用户的邮件确认,密码找回,以及常规订阅消息.通知等内容处理,都可以通过邮件的方式进行处理.本篇随笔介绍结合VUE+Element 前端,实现系统的邮件参 ...
- .NET开发邮件发送功能的全面教程(含邮件组件源码)
今天,给大家分享的是如何在.NET平台中开发“邮件发送”功能.在网上搜的到的各种资料一般都介绍的比较简单,那今天我想比较细的整理介绍下: 1) 邮件基础理论知识 2) ...
- J2EE 邮件发送那些事儿
距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看.虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的.现在有空写写J2EE中邮件发送的开发,实际 ...
- SSH项目里面 忘记密码的邮件发送功能
package com.xxx.util; import java.util.Date; import java.util.Properties; import javax.mail.Address; ...
- [UWP]UWP中获取联系人/邮件发送/SMS消息发送操作
这篇博客将介绍如何在UWP程序中获取联系人/邮件发送/SMS发送的基础操作. 1. 获取联系人 UWP中联系人获取需要引入Windows.ApplicationModel.Contacts名称空间. ...
- java spring 邮件发送
开发中经常会遇到发送邮件进行用户验证,或者其它推送信息的情况,本文基于spring,完成邮件的发送,主要支持普通文本邮件的发送,html文本邮件的发送,带附件的邮件发送,没有实现群发.多个附件发送等需 ...
- Java邮件发送与接收原理
一. 邮件开发涉及到的一些基本概念 1.1.邮件服务器和电子邮箱 要在Internet上提供电子邮件功能,必须有专门的电子邮件服务器.例如现在Internet很多提供邮件服务的厂商:sina.sohu ...
随机推荐
- Weblogic、Tomcat、Apache、Nginx等web容器学习笔记
1.weblogic weblogic是美国Oracle公司的一款产品,是一个基于JAVAEE架构的中间件.是用于开发.集成.部署 .管理大型分布式Web应用.网络应用.数据库应用的Java应用服务器 ...
- 用存储过程和 JAVA 写报表数据源有什么弊端?
我们在报表开发中经常会使用存储过程准备数据,存储过程支持分步计算,可以实现非常复杂的计算逻辑,为报表开发带来便利.所以,报表开发中这样的存储过程并不少见: 3008 行,141KB 的存储过程,会给报 ...
- Lattice Crosslink开发简介
选择lattice的Crosslink器件,大多是因为它功耗比较低.价格便宜,开发也比较简单,相对来说更容易上手.大部分用在手机屏,摄像头模组和平板方面. Crosslink的开发工具是Diamond ...
- 力扣34(java)-在排序数组中查找元素的第一个和最后一个位置(中等)
题目: 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target.请你找出给定目标值在数组中的开始位置和结束位置. 如果数组中不存在目标值 target,返回 [-1, -1]. 你 ...
- 深度解读《深度探索C++对象模型》之C++虚函数实现分析(一)
接下来我将持续更新"深度解读<深度探索C++对象模型>"系列,敬请期待,欢迎关注!也可以关注公众号:iShare爱分享,自动获得推文和全部的文章列表. 假如有这样的一段 ...
- App隐私合规“免费”自动化检测
简介: App隐私合规检测提供了全面的隐私合规检测报告和专家建议,从确保形式合规(隐私政策文本合规性)及实质合规(代码层合规性)的一致性,从个人信息收集.权限使用场景.超范围采集.隐私政策.三方SDK ...
- 重磅 | 数据库自治服务DAS论文入选全球顶会SIGMOD,领航“数据库自动驾驶”新时代
简介: 近日,智能数据库和DAS团队研发的智能调参ResTune系统论文被SIGMOD 2021录用,SIGMOD是数据库三大顶会之首,是三大顶会中唯一一个Double Blind Review的,其 ...
- 多任务多目标CTR预估技术
简介: 多目标(Multi Objective Learning)是MTL中的一种.在业务场景中,经常面临既要又要的多目标问题.而多个目标常常会有冲突.如何使多个目标同时得到提升,是多任务多目标在真 ...
- [GPT] golang 有那么多系统包 该如何了解和学习
在学习和了解Golang(Go语言)的系统包时,可以遵循以下步骤来逐步熟悉并掌握它们: 1. 官方文档阅读: 首先从官方文档入手,Go的标准库文档非常详尽且易于理解.你可以访问 Go标准库 来查看各个 ...
- Dubbo SPI-Wrapper
前言 在Dubbo SPI中是通过Wrapper实现AOP,对于AOP相信大家都不陌生,这里不做的过多的介绍,我们主要来了解Dubbo SPI中是如何使用Wrapper类以及实现的细节. 使用场景 D ...