發郵件 帶有internal ABP郵件傳送

2021-10-17 05:56:44 字數 3815 閱讀 7708

abp  vnext發郵件要使用abpmailkitmodule的實現iemailsender

它使用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, "[email protected]"),

預設配置是不合適,如果需要自己配置,則需要在選擇合適settingprovider,在官方提供了五種方法,它使用的倒序的做的法,先

user>tenant>global>configuration>default

configure(options =>

options.valueproviders.add();

options.valueproviders.add();

options.valueproviders.add();

options.valueproviders.add();

options.valueproviders.add();

其中前面三種是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才是完全的內容,它包括有模板定義,以及郵件內容(要不要設定模板,將模板裡的})替換成內容

abpemailtemplateoptions儲存著所有模板提供者列表,怎麼樣讓自定義的模板放在abpemailtemplateoptions,並通過iemailtemplatedefinitionmanager進行管理,它的操作又是怎麼樣的

它在iemailtemplatedefinitionprovider進行定義,由iemailtemplatedefinitionmanager進行填充,儲存在其列表中,要提供查詢

操作步驟,由iemailtemplateprovider獲取模板內容(這個模擬較重要,呼叫iemailtemplatedefinitionmanager,itemplatelocalizer,istringlocalize***ctory,

abpemailtemplateoptions)獲取到模板內容,再由itemplaterender 渲染

其定義emailtemplatedefinition:佔位符,名字,是否模板,本地化,貢獻者列表

iemailtemplatedefinitionprovider:郵件模版定義提供者 :define方法,新增模板到郵件模板定義的上下文裡面。(即上下文

有多少個模板)模板定義有個add方法提供新增到貢獻者列表

iemailtemplatecontributor:郵件模版貢獻者: 基於模板初始化上下文進行 initialize。

它是利用ivirtualfileprovider提供的模板,它有乙個,也可以是多語言的

iemailtemplatedefinitionmanager:郵件模版定義管理者:執行提供者的define方法填充字典,以便獲取乙個模板定義,所有模板定義列表

emailtemplatedefinitioncontext: dictionary

emailtemplateinitializationcontext:郵件定義emailtemplatedefinition以及iserviceprovider

iemailtemplateprovider方法

itemplaterender 模板渲染

iemailtemplateprovider:獲取模板

python 發郵件 python發郵件

python提供smtplib模組,該模組定義了乙個smtp客戶端會話物件,可用於使用smtp或esmtp偵聽器守護程式向任何網際網路機器傳送郵件。這是乙個簡單的語法,用來建立乙個smtp物件,稍後將演示如何用它來傳送電子郵件 import smtplib smtpobj smtplib.smtp ...

發郵件原理

發 郵件原理 一 郵件伺服器和電子郵箱 郵件伺服器 要在internet 上提供電子郵件功能,必須有專門的電子郵件伺服器。例如現在 internet 很多提供郵件服務的廠商 sina sohu 163 等等他們都有自己的郵件伺服器。這些伺服器類似於現實生活中的郵局,它主要負責接收使用者投遞過來的郵件...

定時發郵件

1.新建服務,新增安裝程式,生成解決方案 在dubug資料夾下複製檔案到d盤cehsi資料夾下 例 2.將installutil.exe 檔案拷貝到ceshi下 在c windows microsoft.net framework 對應的版本路徑下可以找到 3.以管理員身份執行cmd,定位到測試資料...