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ù)庫(kù)中。

代碼設(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可以用于簡(jiǎn)單的信息, 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)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容