ASP.NET Core 中 国内邮箱(163邮箱) 帐户确认和密码恢复

一,问题说明:因为官方网站是以 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 类】。
原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161224.html