一,问题说明:因为官方网站是以 SendGrid 为电子邮件配置程序由于长城的问题,注册使用不方便,故切换为国内邮件提供商如(163或者qq更为方便快捷),微软官方教程如下:https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/accconfirm?view=aspnetcore-3.1&tabs=visual-studio
二,配置过程
-
1,先跟着官方***创建和测试使用身份验证的 web 应用***,创建完成后,直接跳到***实现 IEmailSender***。
-
2,实现国内邮箱提供服务。在项目中创建服务 EmailSender 实现IEmailSender(163账号为例)。
using Microsoft.AspNetCore.Identity.UI.Services; using System.Net.Mail; using System.Text; using System.Threading.Tasks; namespace WebPWrecover.Services { public class EmailSender : IEmailSender { public async Task SendEmailAsync(string email, string subject, string htmlMessage) { //设置邮件内容 var mail = new MailMessage( new MailAddress("邮箱地址", "邮件发送方的名字"), new MailAddress(email) ); mail.Subject = subject; mail.Body = htmlMessage; mail.IsBodyHtml = true; mail.BodyEncoding = Encoding.UTF8; mail.Priority = MailPriority.High; //设置SMTP服务器 var smtp = new SmtpClient("smtp.163.com", 25); smtp.UseDefaultCredentials = false; # 开启身份验证。 smtp.Credentials = new System.Net.NetworkCredential("邮箱地址", "第三方验证密码"); # 这个地方的账号是你的邮箱账号,密码是开启smtp功能时只展示一次的密码(要记住,不是你邮箱的登录密码)下面有说明。 smtp.DeliveryMethod = SmtpDeliveryMethod.Network; await smtp.SendMailAsync(mail); } } }
-
申请一个163的账号。
- 在设置-中开启IMAP/SMTP服务 。
-
-
在开启的时候,会让你发一条信息,然后得到一个长密码(只会出现一次,要记住)。用于第三方验证。记住,然后填到上面【第三方验证密码】处
-
3, 将该服务注册到Startup.cs文件中去。
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer( Configuration.GetConnectionString("DefaultConnection"))); services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true) .AddEntityFrameworkStores<ApplicationDbContext>(); services.AddRazorPages(); services.AddTransient<IEmailSender, EmailSender>(); }
-
4,跟着官方教程***基架 RegisterConfirmation***,创建 RegisterConfirmation 的页面(在此之前你是看不到这个页面的在area中)。
- 这个地方要单独说明一下:
- 当你跟着这个走的时候,到这一步,要注意选中生成的页面,也就是RegisterConfirmation页面,选择下拉箭头,选择项目生成的数据上下文类。
-
单击Add后,就可以在Area中找到RegisterConfirmation。
-
5,进行数据库迁移。在Package Manager Console中运行Update-database即可。
-
5,跟着官方教程走,禁用默认帐户验证。
-
6,后面的步骤和官方一致。
-
7,当你运行项目,注册时,如果没有意外,会在注册的邮箱收到你这个邮箱发送的确认邮件,点击确认后,将会跳转到确认成功页面,然后即可登录成功(本地开发的话,最好在同一个电脑上打开确认邮件)。
三,参考
- http://www.manongjc.com/detail/14-unsonjehxetdnhl.html【Asp.net Core 3.0 Identity 使用smtp账户确认和密码恢复】。
- https://blog.csdn.net/weixin_30729609/article/details/96868286【SmtpClient 类】。