C# 如何在asp.net core中为标识库配置电子邮件发送?

C# 如何在asp.net core中为标识库配置电子邮件发送?,c#,asp.net-core,C#,Asp.net Core,在ASP.NET中,您可以根据我自己的回答,在App_Start文件夹的IdentityConfig.cs中为标识配置电子邮件 ASP.NET核心标识。默认情况下,不包括此IdentityConfig.cs文件。那么,我如何配置电子邮件发送,比如注册确认?根据 ASP.NET Core 2在很大程度上依赖于依赖项注入。 Identity Library的RegisterModel(以及其他依赖电子邮件的模型)具有以下字段: private readonly IEmailSender _email

在ASP.NET中,您可以根据我自己的回答,在App_Start文件夹的IdentityConfig.cs中为标识配置电子邮件

ASP.NET核心标识。默认情况下,不包括此IdentityConfig.cs文件。那么,我如何配置电子邮件发送,比如注册确认?

根据

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

private readonly IEmailSender _emailSender;
您只需使用Startup.cs ConfigureServices方法注入自己实现的IEmailSender:

public void ConfigureServices(IServiceCollection services)
    {
        ...

        services.AddTransient<IEmailSender, EmailSender>();
    }

您可以参考以下步骤使用SMTP发送电子邮件:

  • 创建EmailSender类,并包含以下方法:

     public interface IMyEmailSender
     {
         void SendEmail(string email, string subject, string HtmlMessage);
     }
    
     public class MyEmailSender : IMyEmailSender
     {
         public IConfiguration Configuration { get; }
         public MyEmailSender(IConfiguration configuration)
         {
             Configuration = configuration;
         } 
         public void SendEmail(string email, string subject, string HtmlMessage)
         {
             using (MailMessage mm = new MailMessage(Configuration["NetMail:sender"], email))
             {
                 mm.Subject = subject;
                 string body = HtmlMessage;
                 mm.Body = body;
                 mm.IsBodyHtml = true;
                 SmtpClient smtp = new SmtpClient();
                 smtp.Host = Configuration["NetMail:smtpHost"];
                 smtp.EnableSsl = true;
                 NetworkCredential NetworkCred = new NetworkCredential(Configuration["NetMail:sender"], Configuration["NetMail:senderpassword"]);
                 smtp.UseDefaultCredentials = false;
                 smtp.Credentials = NetworkCred;
                 smtp.Port = 587;
                 smtp.Send(mm);
             }
         } 
     }
    
  • 将SMTP配置信息存储在appsettings.json中

    “NetMail”:{ “smtpHost”:“smtp.live.com”, “发件人”:“发件人电子邮件”, “发件人密码”:“密码” },

  • 在Startup.cs文件中的ConfigureServices方法中注册EmailSernder

         services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
             .AddEntityFrameworkStores<ApplicationDbContext>();
    
         services.AddTransient<IMyEmailSender, MyEmailSender>();
    
    services.AddDefaultIdentity(选项=>options.SignIn.RequireConfirmedAccount=true)
    .AddEntityFrameworkStores。”);
    
  • 之后,您将收到如下电子邮件:

    单击链接后,它将重定向到确认电子邮件页面,然后检查数据库,确认的电子邮件已更改为
    True

    参考:

         services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
             .AddEntityFrameworkStores<ApplicationDbContext>();
    
         services.AddTransient<IMyEmailSender, MyEmailSender>();
    
             var user = new IdentityUser { UserName = Input.Email, Email = Input.Email };
             var result = await _userManager.CreateAsync(user, Input.Password);
             if (result.Succeeded)
             {
                 _logger.LogInformation("User created a new account with password.");
    
                 var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
                 code = WebEncoders.Base64UrlEncode(Encoding.UTF8.GetBytes(code));
                 var callbackUrl = Url.Page(
                     "/Account/ConfirmEmail",
                     pageHandler: null,
                     values: new { area = "Identity", userId = user.Id, code = code, returnUrl = returnUrl },
                     protocol: Request.Scheme);
    
                     _myEmailSender.SendEmail(Input.Email, "Confirm your Email", 
                     $"Please confirm your account by <a href='{HtmlEncoder.Default.Encode(callbackUrl)}'>clicking here</a>.");