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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM