如何在asp.net core中为身份库配置电子邮件发送?

Loa*_*ron 5 c# asp.net-core

在 ASP.NET 中,您可以在 App_Start 文件夹中的 IdentityConfig.cs 中为 Identity 配置电子邮件,按照我自己的回答此处

ASP.NET Core Identity现在是一个库。并且默认情况下不包含此 IdentityConfig.cs 文件。那么我如何配置电子邮件发送,例如注册确认?

Loa*_*ron 13

根据https://medium.com/@MisterKevin_js/enabling-email-verification-in-asp-net-core-identity-ui-2-1-b87f028a97e0

ASP.NET Core 2 很大程度上依赖于依赖注入。身份库的 RegisterModel(以及其他依赖电子邮件的模型)具有以下字段:

private readonly IEmailSender _emailSender;
Run Code Online (Sandbox Code Playgroud)

你所要做的就是使用Startup.cs的ConfigureServices方法来注入你自己实现的IEmailSender:

public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddTransient<IEmailSender, EmailSender>();
    }
Run Code Online (Sandbox Code Playgroud)

您可以在项目中名为 Services 的文件夹中定义此 EmailSender 类:

在此输入图像描述

一个可能的实现是:

using Microsoft.AspNetCore.Identity.UI.Services;
using System.Net;
using System.Net.Mail;
using System.Threading.Tasks;

namespace YourProject.Services
{
    public class EmailSender : IEmailSender
    {
        public Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            SmtpClient client = new SmtpClient
            {
                Port = 587,
                Host = "smtp.gmail.com", //or another email sender provider
                EnableSsl = true,
                DeliveryMethod = SmtpDeliveryMethod.Network,
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential("your email sender", "password")
            };

            return client.SendMailAsync("your email sender", email, subject, htmlMessage);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)