ABP入門系列目錄——學(xué)習(xí)Abp框架之實(shí)操演練
源碼路徑:Github-LearningMpaAbp
1.Abp集成的郵件模塊是如何實(shí)現(xiàn)的
ABP中對(duì)郵件的封裝主要集成在Abp.Net.Mail
和Abp.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
接口提供的Publish
或PublishAsync
方法即可邻辉;我們先來看看需要用到參數(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()});
成功接收通知