C# 如何在asp.net core中为标识库配置电子邮件发送?
在ASP.NET中,您可以根据我自己的回答,在App_Start文件夹的IdentityConfig.cs中为标识配置电子邮件 ASP.NET核心标识。默认情况下,不包括此IdentityConfig.cs文件。那么,我如何配置电子邮件发送,比如注册确认?根据 ASP.NET Core 2在很大程度上依赖于依赖项注入。 Identity Library的RegisterModel(以及其他依赖电子邮件的模型)具有以下字段: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
private readonly IEmailSender _emailSender;
您只需使用Startup.cs ConfigureServices方法注入自己实现的IEmailSender:
public void ConfigureServices(IServiceCollection services)
{
...
services.AddTransient<IEmailSender, EmailSender>();
}
您可以参考以下步骤使用SMTP发送电子邮件:
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);
}
}
}
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>.");