前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ABP入门系列(17)——使用ABP集成的邮件系统发送邮件

ABP入门系列(17)——使用ABP集成的邮件系统发送邮件

作者头像
圣杰
发布2018-01-11 15:00:37
2.6K0
发布2018-01-11 15:00:37
举报
文章被收录于专栏:圣杰的专栏圣杰的专栏

ABP中对邮件的封装主要集成在Abp.Net.MailAbp.Net.Mail.Smtp命名空间下,相应源码在此

#一、Abp集成的邮件模块是如何实现的

分析可以看出主要由以下几个核心类组成:

  • 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

# 二、如何使用Abp集成的邮件系统发送邮件

1. 初始化邮件相关参数

在以EntityFramework结尾的项目中的DefaultSettingsCreator中添加默认设置,然后在程序包管理控制台执行Update-DataBase,这样即可把种子数据更新到数据库中。

代码设置邮件相关参数
代码设置邮件相关参数

代码中我是以QQ邮箱设置,有几点需要注意:

  • UserName即为QQ邮箱名,但Password并不是你QQ邮箱的登陆密码,而是授权码。授权码如何申请,请参考官方文档。否则发送邮件将会得到[Error: need EHLO and AUTH first !”] 异常。
申请到的授权码
申请到的授权码
  • Domain置空即可。

2. 代码调用示例

  • 首先,在Service中通过构造函数注入ISmtpEmailSenderConfiguration
代码语言:js
复制
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类的发送方法即可。
代码语言:js
复制
 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);
成功接收邮件
成功接收邮件

# 三、如何使用Abp集成的通知模块发送通知

直接上代码示例:

  • 首先,在Service中通过构造函数注入INotificationPublisher
代码语言:js
复制
/// <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接口提供的PublishPublishAsync方法即可;我们先来看看需要用到参数。

注意

  • NotificationData 是可选的,某些通知可能不需要数据。一些预定义的通知数据类型可能对于大多数情况够用了。 MessageNotificationData可以用于简单的信息, LocalizableMessageNotificationData可以用于本地化的,带参数的通知信息。
代码语言:javascript
复制
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()});
成功接收通知
成功接收通知
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-01-07 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • #一、Abp集成的邮件模块是如何实现的
  • # 二、如何使用Abp集成的邮件系统发送邮件
    • 1. 初始化邮件相关参数
      • 2. 代码调用示例
      • # 三、如何使用Abp集成的通知模块发送通知
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档