博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET Boilerplate 邮件类使用
阅读量:6936 次
发布时间:2019-06-27

本文共 4180 字,大约阅读时间需要 13 分钟。

在系统我们自定一个 MySettingProvider,并添加到配置集合中,定义一些邮件参数覆盖默认参数,然后通过IOC容器得到SmtpEmailSender实例,调用send方法就实现了,实现代码如下:

1.自定义配置类

public class MySettingProvider : SettingProvider{    public override IEnumerable
GetSettingDefinitions(SettingDefinitionProviderContext context) { return new[] { new SettingDefinition(EmailSettingNames.Smtp.Host, "smtp.qq.com"), new SettingDefinition(EmailSettingNames.Smtp.Port,"25"), new SettingDefinition(EmailSettingNames.DefaultFromAddress,"834663884@qq.com"), new SettingDefinition(EmailSettingNames.Smtp.UserName,"834663884@qq.com"), new SettingDefinition(EmailSettingNames.Smtp.Password,""), new SettingDefinition(EmailSettingNames.Smtp.UseDefaultCredentials,"false"), new SettingDefinition(EmailSettingNames.DefaultFromDisplayName,"shuangjie"), new SettingDefinition( AbpZeroSettingNames.UserManagement.IsEmailConfirmationRequiredForLogin, "true", new FixedLocalizableString("Is email confirmation required for login."), scopes: SettingScopes.Application | SettingScopes.Tenant ) }; } }

2.添加到配置集合,加到模块初始化类里就行

Configuration.Settings.Providers.Add
();

3.使用SmtpEmailSender

var emailSender = IocManager.Instance.Resolve
();emailSender.Send(message.Destination, message.Subject, message.Body);

4.下面将框架是如何实现这些操作的

在SmtpEmailSender的构造函数中注入了ISmtpEmailSenderConfiguration,它的实现类是SmtpEmailSenderConfiguration,通过他我们的Send方法得到我们需要的邮箱配置,那让我们看究竟做了什么

public class SmtpEmailSenderConfiguration : EmailSenderConfiguration, ISmtpEmailSenderConfiguration, ITransientDependency{            public string Host    {        get { return GetNotEmptySettingValue(EmailSettingNames.Smtp.Host); }    }    public int Port    {        get { return SettingManager.GetSettingValue
(EmailSettingNames.Smtp.Port); } } ....

他通过SettingManager的GetSettingValue方法来得到一些配置的值,SettingManager字段,GetNotEmptySettingValue方法来自EmailSenderConfiguration,这里就不粘它的代码了,GetNotEmptySettingValue也是通过SettingManager.GetSettingValue的方式来获得配置数据的,GetSettingValue是SettingManager的扩展方法,接下来就让我看看SettingManager类

public class SettingManager : ISettingManager, ISingletonDependency{    public Task
GetSettingValueAsync(string name) { return GetSettingValueInternalAsync(name, AbpSession.TenantId, AbpSession.UserId); } private async Task
GetSettingValueInternalAsync(string name, int? tenantId = null, long? userId = null) { var settingDefinition = _settingDefinitionManager.GetSettingDefinition(name); //Get for user if defined if (settingDefinition.Scopes.HasFlag(SettingScopes.User) && userId.HasValue) {

SettingScope是枚举,有三个值分别是Application、TenantId、UserId,在这里不讲,通过代码们看到获取配置的方法是_settingDefinitionManager的GetSettingDefinition,返回结果是SettingDefinition,这个类主要用来保存Name、Value等等属性,我们要看的是GetSettingDefinition方法,代码如下

internal class SettingDefinitionManager : ISettingDefinitionManager, ISingletonDependency{    public void Initialize()    {        var context = new SettingDefinitionProviderContext();        foreach (var providerType in _settingsConfiguration.Providers)        {            var provider = CreateProvider(providerType);            foreach (var settings in provider.GetSettingDefinitions(context))            {                _settings[settings.Name] = settings;            }        }    }    public SettingDefinition GetSettingDefinition(string name)    {        SettingDefinition settingDefinition;        if (!_settings.TryGetValue(name, out settingDefinition))        {            throw new AbpException("There is no setting defined with name: " + name);        }        return settingDefinition;    }

通过代码我们看到SettingDefinition来自Provider,也就是我们自定义或默认已有的SettingProvider类,这个类有个方法GetSettingDefinitions,通过它来得到我们的配置,SettingDefinitionManager的Initialize会在程序启动时被调用,详看AbpKernelModule,这个初始化方法就得到了所有的SettingDefinition,这就是大概流程,因为在AbpKernelModule添加的的SettingProvider会早于我们自定义的SettingProvider,所以我们的会覆盖默认的。

到此结束!

转载于:https://www.cnblogs.com/dongshuangjie/p/5306307.html

你可能感兴趣的文章
沟通至上 《高效程序员的45个习惯》读书笔记
查看>>
解决Android中无法搜索联系人的问题
查看>>
使用网站作为WCF服务宿主的几种做法
查看>>
2013ACM多校联合(2)
查看>>
zoom.js:一款效果很独特的页面内容缩放插件
查看>>
GateWay程序分析01_主程序分析
查看>>
POJ 1328
查看>>
程序应用程序PureMvc学习(一)
查看>>
获取元素offset的方法
查看>>
Javascript综合应用小案例
查看>>
想统计指定用户每天通过EXCHANGE发送了多少封邮件么?
查看>>
PostgreSQL中,如何查询表所对应的文件名
查看>>
循环、迭代、遍历和递归
查看>>
chrome操作技巧
查看>>
cocos2d-x之qt port
查看>>
HDU-4568 Hunter 状态压缩
查看>>
使用MyEclipse开发第一个Web程序
查看>>
Windows 7上的DirectX 11.1
查看>>
屌丝程序员的那些事(二)-第一次面试
查看>>
JSP基础(二)JSP语法概述
查看>>