ABP入門系列(17)——使用ABP集成的郵件系統(tǒng)發(fā)送郵件

ABP入門系列目錄——學(xué)習(xí)Abp框架之實(shí)操演練
源碼路徑:Github-LearningMpaAbp


1.Abp集成的郵件模塊是如何實(shí)現(xiàn)的

ABP中對(duì)郵件的封裝主要集成在Abp.Net.MailAbp.Net.Mail.Smtp命名空間下从隆,相應(yīng)源碼在此殴瘦。

分析可以看出主要由以下幾個(gè)核心類組成:

  • EmailSettingNames:靜態(tài)常量類斑举,主要定義了發(fā)送郵件需要的相關(guān)參數(shù):Port帚屉、Host庭敦、UserName厌丑、Password、Domain辈双、EnableSsl、UseDefaultCredentials柜砾。
  • EmailSettingProvider:繼承自SettingProvider湃望,對(duì)EmailSettingNames中定義的參數(shù)項(xiàng)進(jìn)行設(shè)置。
  • **SmtpEmailSenderConfiguration ** :繼承自EmailSenderConfiguration,用來讀取設(shè)置的支持Smtp協(xié)議郵件相關(guān)參數(shù)項(xiàng)证芭。
  • SmtpEmailSender:繼承自EmailSenderBase瞳浦,實(shí)現(xiàn)了ISmtpEmailSender接口。該類就是基于SMTP協(xié)議進(jìn)行郵件發(fā)送废士。提供了SendEmailAsync(MailMessage mail)SendEmail(MailMessage mail)叫潦,同步異步兩種發(fā)送郵件的方法。

想具體了解源碼的實(shí)現(xiàn)方式官硝,建議參考以下兩篇博文:
結(jié)合ABP源碼實(shí)現(xiàn)郵件發(fā)送功能
ABP源碼分析七:Setting 以及 Mail

2.如何使用Abp集成的郵件系統(tǒng)發(fā)送郵件


2.1. 初始化郵件相關(guān)參數(shù)

在以EntityFramework結(jié)尾的項(xiàng)目中的DefaultSettingsCreator中添加默認(rèn)設(shè)置矗蕊,然后在程序包管理控制臺(tái)執(zhí)行Update-DataBase,這樣即可把種子數(shù)據(jù)更新到數(shù)據(jù)庫中氢架。

代碼設(shè)置郵件相關(guān)參數(shù)

代碼中我是以QQ郵箱設(shè)置傻咖,有幾點(diǎn)需要注意:

  • UserName即為QQ郵箱名,但Password并不是你QQ郵箱的登陸密碼岖研,而是授權(quán)碼卿操。授權(quán)碼如何申請(qǐng),請(qǐng)參考官方文檔孙援。否則發(fā)送郵件將會(huì)得到**[Error: need EHLO and AUTH first !”] **異常害淤。
申請(qǐng)到的授權(quán)碼
  • Domain置空即可。

2.2. 代碼調(diào)用示例

  • 首先赃磨,在Service中通過構(gòu)造函數(shù)注入ISmtpEmailSenderConfiguration
 private readonly IRepository<Task> _taskRepository;
        private readonly IRepository<User, long> _userRepository;
        private readonly ISmtpEmailSenderConfiguration _smtpEmialSenderConfig;

        /// <summary>
        ///In constructor, we can get needed classes/interfaces.
        ///They are sent here by dependency injection system automatically.
        /// </summary>
        public TaskAppService(IRepository<Task> taskRepository, IRepository<User, long> userRepository,
            ISmtpEmailSenderConfiguration smtpEmialSenderConfigtion)
        {
            _taskRepository = taskRepository;
            _userRepository = userRepository;
            _smtpEmialSenderConfig = smtpEmialSenderConfigtion;
        }
  • 在需要發(fā)送郵件的地方調(diào)用SmtpEmailSender類的發(fā)送方法即可筝家。
 SmtpEmailSender emailSender = new SmtpEmailSender(_smtpEmialSenderConfig);
                string message = "You hava been assigned one task into your todo list.";
                emailSender.Send("ysjshengjie@qq.com", task.AssignedPerson.EmailAddress, "New Todo item", message);
成功接收郵件

3.如何使用Abp集成的通知模塊發(fā)送通知


直接上代碼示例:

  • 首先,在Service中通過構(gòu)造函數(shù)注入INotificationPublisher
/// <summary>
        ///In constructor, we can get needed classes/interfaces.
        ///They are sent here by dependency injection system automatically.
        /// </summary>
        public TaskAppService(IRepository<Task> taskRepository, IRepository<User, long> userRepository,
            ISmtpEmailSenderConfiguration smtpEmialSenderConfigtion, INotificationPublisher notificationPublisher)
        {
            _taskRepository = taskRepository;
            _userRepository = userRepository;
            _smtpEmialSenderConfig = smtpEmialSenderConfigtion;
            _notificationPublisher = notificationPublisher;
        }
  • 在需要發(fā)送通知的地方調(diào)用INotificationPublisher接口提供的PublishPublishAsync方法即可邻辉;我們先來看看需要用到參數(shù)溪王。

注意

  • NotificationData 是可選的,某些通知可能不需要數(shù)據(jù)值骇。一些預(yù)定義的通知數(shù)據(jù)類型可能對(duì)于大多數(shù)情況夠用了莹菱。 MessageNotificationData可以用于簡單的信息, LocalizableMessageNotificationData可以用于本地化的吱瘩,帶參數(shù)的通知信息道伟。
string message = "You hava been assigned one task into your todo list.";
_notificationPublisher.Publish("NewTask", new MessageNotificationData(message), null,NotificationSeverity.Info, new[] {task.AssignedPerson.ToUserIdentifier()});
成功接收通知
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市使碾,隨后出現(xiàn)的幾起案子蜜徽,更是在濱河造成了極大的恐慌,老刑警劉巖票摇,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拘鞋,死亡現(xiàn)場離奇詭異,居然都是意外死亡矢门,警方通過查閱死者的電腦和手機(jī)盆色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門灰蛙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人隔躲,你說我怎么就攤上這事摩梧。” “怎么了宣旱?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵仅父,是天一觀的道長。 經(jīng)常有香客問我响鹃,道長驾霜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任买置,我火速辦了婚禮,結(jié)果婚禮上强霎,老公的妹妹穿的比我還像新娘忿项。我一直安慰自己,他們只是感情好城舞,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布轩触。 她就那樣靜靜地躺著,像睡著了一般家夺。 火紅的嫁衣襯著肌膚如雪脱柱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天拉馋,我揣著相機(jī)與錄音榨为,去河邊找鬼。 笑死煌茴,一個(gè)胖子當(dāng)著我的面吹牛随闺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蔓腐,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼矩乐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了回论?” 一聲冷哼從身側(cè)響起散罕,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎傀蓉,沒想到半個(gè)月后欧漱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡僚害,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年硫椰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了繁调。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡靶草,死狀恐怖蹄胰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情奕翔,我是刑警寧澤裕寨,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布,位于F島的核電站派继,受9級(jí)特大地震影響宾袜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜驾窟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一庆猫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧绅络,春花似錦月培、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至衷恭,卻和暖如春此叠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背随珠。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國打工灭袁, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牙丽。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓简卧,卻偏偏與公主長得像,于是被迫代替她去往敵國和親烤芦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子举娩,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容