zoukankan      html  css  js  c++  java
  • 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 类】。
  • 相关阅读:
    NConsoler 介绍
    HOWTO:批量删除存储过程和表
    HOWTO:使ASP.NET网站Forms验证可以指定多个登录页面
    [架构模式实践]如何不让第三方服务/组件的故障阻碍开发和测试进度
    GDI+学习笔记
    脚印: SD2C 2009 参会小记(非技术篇)
    Expression Web使用问题,相关资源及今日阅读
    HOWTO:FirePHP乱码问题解决
    [ECSHOP挖寶]用戶注銷過程
    励志好文
  • 原文地址:https://www.cnblogs.com/jlxa162hhf/p/14161224.html
Copyright © 2011-2022 走看看