zoukankan      html  css  js  c++  java
  • 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
     
  • 相关阅读:
    iOS开发UI篇—懒加载
    iOS开发UI篇—transframe属性(形变)
    iOS开发UI基础—手写控件,frame,center和bounds属性
    iOS开发UI篇—Button基础
    【iOS开发】多线程下NSOperation、NSBlockOperation、NSInvocationOperation、NSOperationQueue的使用
    【iOS开发】NSOperation简单介绍
    【iOS开发】创建单例的两种方法
    【iOS开发】iOS对UIViewController生命周期和属性方法的解析
    【iOS开发】UIView之userInteractionEnabled属性介绍
    【iOS开发】IOS界面开发使用viewWithTag:(int)findTag方法获取界面元素
  • 原文地址:https://www.cnblogs.com/webenh/p/13140460.html
Copyright © 2011-2022 走看看