电子邮箱帐户和消息模板实体在功能实现和业务逻辑上二者之间都有存在着极深的耦合关系,电子邮箱帐户实体提供服务器端电子邮箱的相关数据信息;消息模板实体提供基于HTML编码格式的电子邮件内容数据信息;二者结合起来实现,定义实现服务器端电子邮箱,向客户的电子邮箱中发送基于HTML编码格式的电子邮件;所以在定义实现上最好把二者视为一个整体进行定义实现,可以我们更为容易理解二者在程序中抽象实现的功能实现逻辑的业务实现逻辑。
083 EmailAccountSettings、MessageTemplatesSettings、NopMessageDefaults、MessageTemplateSystemNames
EmailAccountSettings类,通过该类及其属性成员实例,把电子邮箱帐户设置相关的一些默认数据值,并把这些数据值持久化存储到数据库的设置表中,管理员可以修改这些数据值,使当前程序可以根据管理员的需求进行定制。
MessageTemplatesSettings类,通过该类及其属性成员实例,把消息模板设置相关的一些默认数据值,并把这些数据值持久化存储到数据库的设置表中,管理员可以修改这些数据值,使当前程序可以根据管理员的需求进行定制。 NopMessageDefaults类,过该类中定义的属性成员,拼接出相应的消息模板缓存键字符串常量,为消息模板缓存项(键/值对)的构建提供数据支撑。
MessageTemplateSystemNames类,通过该类及其常量成员实例,把发送的消息与当前程序中的系统名称字符串常建立映射关系,为当前程序中的服务器邮箱(电子邮件服务)向客户邮箱中发送指定格式(HTML格式进行编码)的信息提供模板和数据支撑,当然当前类定义的映射关系不需要作任何的改变,也可以直接在当前程序中与短信服务进行耦合。
084 EmailAccount、MessageDelayPeriod、MessageTemplate、EmailAccountBuilder、MessageTemplateBuilder
EmailAccount类,通过该类及其属性成员实例,用来获取/设置一/多个服务器端的电子邮箱(服务),用来从服务端向一些用户发送关于产品、订单、收/退货等固定格式(HTML格式进行编码)信息的电子邮件。
MessageDelayPeriod枚举, 该枚举定义了2种消息延迟发送的方式,通过枚举实例选定其中的1种,确认消息延迟发送的时间单位。
MessageTemplate类,通过该类及其属性成员实例,用来存储服务器端的电子邮箱向所有客户电子邮箱发送电子邮件信息的固定格式(HTML格式进行编码)、收件人、收件人类型(『暗』抄收件人(BCC)和『明』抄收件人(TO,CC))、邮件标题、邮件附件和邮件内容等数据信息。
EmailAccountBuilder类, 该类通过对父类中同名方法进行覆写,为电子邮箱帐户实体类中的一些属性成员定义了相关约束规则和关系,并把这些定义约束规则和关系,映射到数据库中新生成的电子邮箱帐户表的字段上。
MessageTemplateBuilder类,该类通过对父类中同名方法进行覆写,为消息模板实体类中的一些属性成员定义了相关约束规则和关系,并把这些定义约束规则和关系,映射到数据库中新生成的消息模板表的字段上。
085 IEmailAccountService、EmailAccountService、NotifyType、NotifyData、INotificationService、NotificationService
IEmailAccountService接口,继承于该接口的具体实现类,实现了电子邮箱帐户实体与电子邮箱帐户表之间的CRUD数据交互操作。
EmailAccountService类,继承于IEmailAccountService接口,该类实现了电子邮箱帐户实体与电子邮箱帐户表之间的CRUD数据交互操作。
NotifyType枚举, 该枚举定义了3种类型的电子邮件通知消息,通过枚举实例选定其中的1种,确认所发送电子邮件通知消息的类型。
NotifyData结构体,通过该类及其属性成员实例,用来规定和存储,服务器端的电子邮箱向所有客户邮箱发送信息的类型(成功/错误/警告)和固定格式(HTML格式进行编码)内容等数据。
INotificationService接口,继承于该接口的具体实现类,通过JSON的序列化/反序列化操作,把消息数据结构体的所有实例与临时数据字典实例之间的数据进行交互操作。
NotificationService类,继承于INotificationService接口,该类通过JSON的序列化/反序列化操作,把消息数据结构体的所有实例与临时数据字典实例之间的数据进行交互操作。
说明:
(HttpContext.)TempData本质是存储到服务端的Session文件中,1个指定的Controller.Action访问前和访问中,浏览器从服务端的Session文件中,通过指定的键获取相应的数据值,一旦1个指定的Controller.Action访问一次访问结束之后,马上就会清空。
- 重构Nop.Data.Migrations.SchemaMigration.Up方法,取消下列语句前的注释:
_migrationManager.BuildTable
_migrationManager.BuildTable
2、重构Nop.Web.Framework.Infrastructure.DependencyRegistrar.Register方法,取消下列语句前的注释:
services.AddScoped
//services.AddScoped
services.AddScoped
3、重构Nop.Services.Installation.InstallationService.InstallSettingsAsync类。
1>、定义变量并重构构造方法:
private readonly IRepository
2>、取消Nop.Services.Installation.InstallationService.InstallSettingsAsync.MessageTemplatesSettings设置前的注释。
3>、定义Nop.Services.Installation.InstallationService.InstallEmailAccountsAsync方法。
4>、定义Nop.Services.Installation.InstallationService.InstallMessageTemplatesAsync方法。
5>、 重构Nop.Services.Installation.InstallationService.InstallRequiredDataAsync方法,取消下列语句前的注释:
await InstallEmailAccountsAsync();
await InstallMessageTemplatesAsync();
对以上功能更为具体实现和注释见22-01-31-023_Nop_4.40.4(初始化安装默认电子邮箱帐户和消息模板数据)。



