发送电子邮件

介绍

对于大多数应用程序,发送电子邮件是一项非常常见的任务 ASP.NET Boilerplate提供了以简单方式发送电子邮件的基本基础结构。它还将电子邮件服务器配置与发送电子邮件分开。

IEmailSender

IEmailSender是一种在不知道详细信息的情况下发送电子邮件的服务。用法示例:

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
        );
    }
}

我们只是注入了 IEmailSender并使用了Send方法。Send方法有额外的重载。例如,它还可以获取MailMessage对象(不适用于.NET Core,因为.NET Core不包含SmtpClient和MailMessage)。

ISmtpEmailSender

还有一个ISmtpEmailSender扩展了IEmailSender并添加了一个 BuildClient方法来创建一个SmtpClient,然后直接使用它(由于.NET Core不包含SmtpClient和MailMessage,因此不适用于.NET Core)。对于大多数情况,使用IEmailSender就足够了。

NullEmailSender

还有一个 IEmailSender 空对象模式实现,恰当地命名为NullEmailSender您可以在单元测试中使用它,或者使用属性注入模式注入IEmalSender 

组态

电子邮件发件人使用设置管理系统来读取电子邮件发送配置。所有设置名称在Abp.Net.Mail.EmailSettingNames类中定义为常量字符串。

他们的价值观和描述:

MailKit集成

由于.NET Core不支持标准的System.Net.Mail.SmtpClient,因此我们需要第三方供应商来发送电子邮件。幸运的是, MailKit为默认的SmtpClient提供了一个很好的替代品。这也是 微软的 建议

Abp.MailKit包优雅地集成到ABP的电子邮件发送系统中,因此您仍然可以使用上述IEmailSender通过MailKit发送电子邮件。

安装

首先,将Abp.MailKit NuGet包安装到您的项目中:

Install-Package Abp.MailKit

积分

将AbpMailKitModule添加到模块的依赖项 

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

用法

您可以使用上面描述的IEmailSender,因为Abp.MailKit包为它注册了MailKit实现。它也使用相同的配置。

定制

在创建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);
    }
}

然后,您可以使用模块PreInitialize方法中的实现替换IMailKitSmtpBuilder接口

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

    //...
}

(不要忘记添加“using Abp.Configuration.Startup;”语句,因为ReplaceService扩展方法是在该命名空间中定义的)

nidie.com.cn - 用心与你沟通