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
     
  • 相关阅读:
    zoj 3279 线段树 OR 树状数组
    fzu 1962 树状数组 OR 线段树
    hdu 5057 块状链表
    hdu3487 Play with Chain
    bzoj 1588营业额统计(HNOI 2002)
    poj2823 Sliding Window
    poj2828 Buy Tickets
    poj2395 Out of Hay
    poj3667 Hotel
    poj1703 Lost Cows
  • 原文地址:https://www.cnblogs.com/webenh/p/13140460.html
Copyright © 2011-2022 走看看