ABP入门系列(17)——使用ABP集成的邮件系统发送邮件
生活随笔
收集整理的這篇文章主要介紹了
ABP入门系列(17)——使用ABP集成的邮件系统发送邮件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.Abp集成的郵件模塊是如何實現的
ABP中對郵件的封裝主要集成在Abp.Net.Mail和Abp.Net.Mail.Smtp命名空間下,相應源碼在此。
分析可以看出主要由以下幾個核心類組成:
- EmailSettingNames:靜態常量類,主要定義了發送郵件需要的相關參數:Port、Host、UserName、Password、Domain、EnableSsl、UseDefaultCredentials。
- EmailSettingProvider:繼承自SettingProvider,對EmailSettingNames中定義的參數項進行設置。
- **SmtpEmailSenderConfiguration ** :繼承自EmailSenderConfiguration,用來讀取設置的支持Smtp協議郵件相關參數項。
- SmtpEmailSender:繼承自EmailSenderBase,實現了ISmtpEmailSender接口。該類就是基于SMTP協議進行郵件發送。提供了SendEmailAsync(MailMessage mail)和SendEmail(MailMessage mail),同步異步兩種發送郵件的方法。
想具體了解源碼的實現方式,建議參考以下兩篇博文:
結合ABP源碼實現郵件發送功能
ABP源碼分析七:Setting 以及 Mail
2.如何使用Abp集成的郵件系統發送郵件
2.1. 初始化郵件相關參數
在以EntityFramework結尾的項目中的DefaultSettingsCreator中添加默認設置,然后在程序包管理控制臺執行Update-DataBase,這樣即可把種子數據更新到數據庫中。
代碼設置郵件相關參數
代碼中我是以QQ郵箱設置,有幾點需要注意:
- UserName即為QQ郵箱名,但Password并不是你QQ郵箱的登陸密碼,而是授權碼。授權碼如何申請,請參考官方文檔。否則發送郵件將會得到**[Error: need EHLO and AUTH first !”] **異常。
申請到的授權碼
- Domain置空即可。
2.2. 代碼調用示例
- 首先,在Service中通過構造函數注入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;}- 在需要發送郵件的地方調用SmtpEmailSender類的發送方法即可。
?
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集成的通知模塊發送通知
直接上代碼示例:
- 首先,在Service中通過構造函數注入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;}- 在需要發送通知的地方調用INotificationPublisher接口提供的Publish或PublishAsync方法即可;我們先來看看需要用到參數。
注意
- NotificationData 是可選的,某些通知可能不需要數據。一些預定義的通知數據類型可能對于大多數情況夠用了。 MessageNotificationData可以用于簡單的信息, LocalizableMessageNotificationData可以用于本地化的,帶參數的通知信息。
?
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()});成功接收通知
作者:圣杰
鏈接:https://www.jianshu.com/p/ea10c8168264
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
總結
以上是生活随笔為你收集整理的ABP入门系列(17)——使用ABP集成的邮件系统发送邮件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】abp vNext微服务框架分析
- 下一篇: 没工作办理信用卡妙招