Introduction

Email sending is a pretty common task for almost every application. ASP.NET Boilerplate provides a basic infrastructure to simply send emails and seperate email server configuration from sending emails.

IEmailSender

IEmailSender is a service to simply send emails without knowing details. Example usage:

public class TaskManager : IDomainService
{
private readonly IEmailSender _emailSender; public TaskManager(IEmailSender emailSender)
{
_emailSender = emailSender;
} public void Assign(Task task, Person person)
{
//Assign task to the person
task.AssignedTo = person; //Send a notification email
_emailSender.Send(
to: person.EmailAddress,
subject: "You have a new task!",
body: $"A new task is assigned for you: <b>{task.Title}</b>",
isBodyHtml: true
);
}
}

We simply injected IEmailSender and used Send method. Send method has a few more overloads. It can also get a MailMessage object (not available for .net core since .net core does not include SmtpClient and MailMessage).

我们简单用注射IEmailSender和发送方法。发送方法有更多重载。它也可以让一个MailMessage对象(不可用。NET的核心从.NET核心不包括SmtpClient和邮件)。

ISmtpEmailSender

There is also ISmtpEmailSender which extends IEmailSender and adds BuildClient method to create an SmtpClient to directly use it (not available for .net core since .net core does not include SmtpClient and MailMessage). Using IEmailSender will be enough for most cases.

也有ismtpemailsender继承 iemailsender和添加方法用于创建在一buildclient SmtpClient直接使用它(不可用,因为.NET .NET核心的核心不包含MailMessage和SmtpClient)。使用iemailsender要足够的大多数例子。

NullEmailSender

There is also a null object pattern implementation of IEmailSender as NullEmailSender. You can use it in unit tests or injecting IEmalSender with property injection pattern.

Configuration

Email Sender uses setting management system to read emal sending configuration. All setting names are defined in Abp.Net.Mail.EmailSettingNames class as constant strings. Their values and descriptions:

电子邮件发件人使用设置管理系统读取邮件发送配置。所有设定的名字是在类的定义abp.net.mail.emailsettingnames常量字符串。他们的值和描述:

  • Abp.Net.Mail.DefaultFromAddress: Used as sender email address when you don't specify a sender while sending emails (as like in the sample above).
  • Abp.Net.Mail.DefaultFromDisplayName: Used as sender display name when you don't specify a sender while sending emails (as like in the sample above).
  • Abp.Net.Mail.Smtp.Host: IP/Domain of the SMTP server (default: 127.0.0.1).
  • Abp.Net.Mail.Smtp.Port: Port of the SMTP server (default: 25).
  • Abp.Net.Mail.Smtp.UserName: Username, if SMTP server requires authentication.
  • Abp.Net.Mail.Smtp.Password: Password, if SMTP server requires authentication.
  • Abp.Net.Mail.Smtp.Domain: Domain for the username, if SMTP server requires authentication.
  • Abp.Net.Mail.Smtp.EnableSsl: A value indicates that SMTP server uses SSL or not ("true" or "false". Default: "false").
  • Abp.Net.Mail.Smtp.UseDefaultCredentials: True, to use default credentials instead of provided username and password ("true" or "false". Default: "true").

MailKit Integration

Since .net core does not support standard System.Net.Mail.SmtpClient, so we need a 3rd-party vendor to send emails. Fortunately, MailKit provides a good replacement for default SmtpClient. It's also suggested by Microsoft.

Abp.MailKit package gracefully integrates to ABP's email sending system. So, you can still use IEmailSender as described above to send emails via MailKit.

Installation

First, install Abp.MailKit nuget package to your project:

Install-Package Abp.MailKit

Integration

Add AbpMailKitModule to dependencies of your module:

[DependsOn(typeof(AbpMailKitModule))]
public class MyProjectModule : AbpModule
{
//...
}

Usage

You can use IEmailSender as described before since Abp.MailKit package registers MailKit implementation for it. It also uses the same configuration defined above.

Customization

You may need to make additional configuration or customization while creating MailKit's SmtpClient. In that case, you can replace IMailKitSmtpBuilder interface with your own implementation. You can derive from DefaultMailKitSmtpBuilder to make it easier. For instance, you may want to accept all SSL certificates. In that case, you can override ConfigureClient method as shown below:

你可能需要进行额外的配置或定制的同时创造MailKit SmtpClient。在这种情况下,你可以用你自己的imailkitsmtpbuilder接口实现替换。你可以从defaultmailkitsmtpbuilder更容易。例如,您可能希望接受所有SSL证书。在这种情况下,您可以重写configureclient方法如下图所示:

public class MyMailKitSmtpBuilder : DefaultMailKitSmtpBuilder
{
public MyMailKitSmtpBuilder(ISmtpEmailSenderConfiguration smtpEmailSenderConfiguration)
: base(smtpEmailSenderConfiguration)
{
} protected override void ConfigureClient(SmtpClient client)
{
client.ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true; base.ConfigureClient(client);
}
}

Then you can replace IMailKitSmtpBuilder interface with your implementation in PreInitialize method of your module:

[DependsOn(typeof(AbpMailKitModule))]
public class MyProjectModule : AbpModule
{
public override void PreInitialize()
{
Configuration.ReplaceService<IMailKitSmtpBuilder, MyMailKitSmtpBuilder>();
} //...
}

(remember to add "using Abp.Configuration.Startup;" statement since ReplaceService extension method is defined in that namespace)

(记得添加“使用ABP。配置。启动;”声明后,replaceservice扩展方法是定义在命名空间)

ABP框架系列之二十四:(Email-Sending-EF-电子邮件发送)的更多相关文章

  1. ABP框架系列之二十:(Dependency-Injection-依赖注入)

    What is Dependency Injection If you already know Dependency Injection concept, Constructor and Prope ...

  2. ABP框架系列之二十六:(EventBus-Domain-Events-领域事件)

    In C#, a class can define own events and other classes can register it to be notified when something ...

  3. ABP框架系列之二十二:(Dynamic-Web-API-动态WebApi)

    Building Dynamic Web API Controllers This document is for ASP.NET Web API. If you're interested in A ...

  4. ABP框架系列之二十八:(Handling-Exceptions-异常处理)

    Introduction This document is for ASP.NET MVC and Web API. If you're interested in ASP.NET Core, see ...

  5. ABP框架系列之二十五:(Embedded-Resource-Files-嵌入式资源文件)

    Introduction ASP.NET Boilerplate provides an easy way of using embedded Razor views (.cshtml files) ...

  6. ABP框架系列之二十九:(Hangfire-Integration-延迟集成)

    Introduction Hangfire is a compherensive background job manager. You can integrate ASP.NET Boilerpla ...

  7. 《sed的流艺术之四》-linux命令五分钟系列之二十四

    本原创文章属于<Linux大棚>博客,博客地址为http://roclinux.cn.文章作者为rocrocket. 为了防止某些网站的恶性转载,特在每篇文章前加入此信息,还望读者体谅. ...

  8. ABP源码分析二十四:Notification

    NotificationDefinition: 用于封装Notification Definnition 的信息.注意和Notification 的区别,如果把Notification看成是具体的消息 ...

  9. ABP框架系列之二:(Entity Framework Core-实体核心框架)

    Introduction(介绍) Abp.EntityFrameworkCore nuget package is used to integrate to Entity Framework (EF) ...

随机推荐

  1. 20165312 2017-2018-2《JAVA程序设计》第8周学习总结

    20165312 2017-2018-2<JAVA程序设计>第8周学习总结 一.第十二章知识点总结 进程与线程 进程是程序的一次动态执行进程,它对应了从代码加载.执行至执行完毕的一个完整过 ...

  2. android 开发 View _13 绘制图片与BitmapShader位图的图像渲染器

    BitmapShader位图的图像渲染器 TileMode 模式 Shader.TileMode.CLAMP 边缘拉伸. Shader.TileMode.MIRROR 在水平方向和垂直方向交替景象, ...

  3. 表单:!!!常用JS: form 表单代码

    手机(文本框): <input type="text" name="" maxlength="11" placeholder=&quo ...

  4. swift kvc赋值

    1定义模型属性的时候,如果是对象,通常都是可选的(在需要的时候创建,避免写构造函数,简化代码) 2如果是基本数据类型,不能设置成可选的(运行时获取不到属性),而且要设置初始值,否则KVC会崩溃 3使用 ...

  5. 201772020113 李清华《面向对象程序设计(java)》第三周学习总结

    一.测试题反思: 这次的测试题暴露出我在学习上的很多问题:首先,编程能力非常薄弱,编程题目只写出了第一个程序,还因为小问题通不过测试,以后一定要多上手练习,多阅读示例程序.其次,对理论知识的掌握不全面 ...

  6. RANSAC介绍(Matlab版直线拟合+平面拟合)

    https://blog.csdn.net/u010128736/article/details/53422070

  7. Delphi中Chrome Chromium、Cef3学习笔记(二)

    原文   http://blog.csdn.net/xtfnpgy/article/details/46635739   用Tchromium替换webbrowser 用惯了EmbeddedWB,不想 ...

  8. 关于页面缩放时css错乱的处理方法---之一

    这几天遇到一个问题,就是在做网页的时候,页面缩放时,布局就乱了,原来的样子不会跟随缩放的放大或者缩小进行改变,直接导致的后果,就是页面很难看,无法使用 之前虽然写了代码,但是一直没有注意到缩放后页面的 ...

  9. Linux命令:mapfile

    mapfile [-n 计数] [-O 起始序号] [-s 计数] [-t] [-u fd] [-C 回调] [-c 量子] [数组] 两个作用: 一是给index数组读取标准输入来赋值:二是文件描述 ...

  10. Sql Server数据库之事务,视图,索引

    一.事务的定义 事务是一种机制,包含一组操作指令,并将所有的命令作为一个整体一起向系统提交或撤销操作请求(要么都执行,要么都不执行) 二.事务的分类 显式事务:用Begin TRANSCATION开始 ...