ASP 核心 2.1 电子邮件确认

ASP Core 2.1 Email Confirmation

已经搜索了很长一段时间,但没有找到任何关于如何以 SMTP 形式设置 Account/Email 确认的来源,而不是像使用 SendGrid/MailKit 这样的任何其他模式,用于ASP 使用 Razor Class 库的核心 2.1 项目。

在这方面有什么建议吗?在这方面如何使用IdentityUser?是否有必要先搭建 Identity 的脚手架?请各位高手看看有没有这方面的帮助。

建议在生产环境中使用 SendGrid 和其他服务,因为这些服务已设置为可适当扩展并且可以一次处理发送数百万封电子邮件。

不过,我很感激在 运行 您的应用程序处于开发阶段时设置 SMTP 电子邮件会很好。

因此,在大多数情况下,您可以按照 the docs 设置电子邮件确认。您需要更改的是 EmailSender 实现以使用您的 SMTP 服务器。

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

namespace YourApp
{
    public class DevEmailSender : IEmailSender
    {
        public Task SendEmailAsync(string email, string subject, string htmlMessage)
        {
            var client = new SmtpClient("yoursmtpserver") {
                UseDefaultCredentials = false,
                Credentials = new NetworkCredential("yourusername", "yourpassword")
            };
            var mailMessage = new MailMessage {
                From = new MailAddress("account-security-noreply@yourdomain.com")
            };
            mailMessage.To.Add(email);
            mailMessage.Subject = subject;
            mailMessage.Body = htmlMessage;
            return client.SendMailAsync(mailMessage);
        }
    }
}

那么你只需要在Startup.cs中将其配置为ConfigureServices中的服务:

services.AddTransient<IEmailSender, DevEmailSender>();

设置 SMTP 服务器超出了此处的范围,但如果您有 gmail,例如,您可以按照 this blog post 了解如何操作。同样,请记住,这不是生产策略,实际上会使您的 gmail 帐户面临安全漏洞,google 会在您设置时向您突出显示。但是,如果您使用一次性帐户,这可能是一种快速而肮脏的解决方案,可以通过 ASP.NET Core Identity 获得电子邮件确认。

有一个简单的开发 smtp 服务器,可用于发送电子邮件的开发目的,它称为 fakeSMTP

将@marcusturewicz 上面的示例代码与gmail SMTP 一起使用时,添加端口号(587) 并将EnableSsl 设置为true,如下所示。

 var client = new SmtpClient("smtp.gmail.com",587)
        {
            UseDefaultCredentials = false,
            EnableSsl=true,
            Credentials = new NetworkCredential(userName, password)
        };