热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

“忘记电子邮件”功能不发送电子邮件总结

我正在构建我的第一个ASP.NETCoreRazorPages应用程序。我创建了一个EmailSender

我正在构建我的第一个ASP.NET Core Razor Pages应用程序。

我创建了一个EmailSender类,该类实现了IEmailSender

public class EmailSender : IEmailSender
{
private readonly EmailSettings Settings;
public EmailSender(IOptions emailSettings)
{
Settings = emailSettings.Value;
}
public async Task SendEmailAsync(string email,string subject,string htmlMessage)
{
using (MailMessage message = new MailMessage())
using (SmtpClient client = new SmtpClient())
{
client.Host = Settings.Host;
client.Port = Settings.Port;
client.Credentials = new NetworkCredential(Settings.username,Settings.Password);
client.EnableSsl = Settings.EnableSsl;
message.To.Add(email);
message.From = new mailaddress(Settings.FromAddress);
message.Subject = subject;
message.Body = htmlMessage;
message.IsBodyHtml = true;
await client.SendMailAsync(message);
}
await Task.CompletedTask;
}
}

而且我已经在Startup.cs中注册了EmailSender

public void ConfigureServices(IServiceCollection services)
{
// Default initialization...
services.AddTransient();
services.Configure(Configuration.GetSection("EmailSettings"));
}

我的代码没有错误构建。

使用断点,可以看到当我运行应用程序并单击忘记密码时,将调用EmailSender构造函数,并且EmailSettings实例具有预期的值。输入我的电子邮件地址并单击重置密码时,将再次调用EmailSender构造函数。但是,不会永远不会调用EmailSender.SendEmailAsync(),也不会发送电子邮件。

我确信我的EmailSender类已正确设置,因为正在调用构造函数。但是我不知道如何找出从未被称为SendEmailAsync()的原因。

有人有建议吗?



脚手架身份

您需要使用身份标识来调试代码。

右键单击“标识”文件夹,然后单击


  • 添加>>新的脚手架项目。.

在左侧菜单中单击


  • 身份>>添加

然后


  • 检查帐户\忘记密码

  • 选择您的数据库上下文类

  • 点击添加

现在您的剃须刀页面的代码后面有代码,因此请单击箭头以展开文件后面的代码。

PostAsync()中的if语句上放置一个断点。

if (user == null || !(await _userManager.IsEmailConfirmedAsync(user))) // Breakpoint here
{
...
}

运行该应用程序并执行“忘记密码”请求。

您的断点将命中,您将能够进行调试。因为等待_userManager.IsEmailConfirmedAsync(user) false 。它不会退出if语句。

通过将调试器拖到该循环之外来解决该问题,然后继续进行。现在,您将看到将呼叫您的电子邮件发件人,并且您的SendEmailAsync将被命中。

总结



  • 身份团队通过一个图书馆软件包为您提供“魔术”登录,注销和帐户页面。

  • 要访问代码,您需要对它们进行脚手架。

  • 您没有点击SendEmailAsync,因为您尝试为其输入密码的用户很可能不是,因此未确认您用户的电子邮件! li>


,

请确认您的AccountController调用了IEmailSender.SendEmailAsync方法。参见此处的示例:https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/security/authentication/identity/sample/src/ASPNETCore-IdentityDemoComplete/IdentityDemo/Controllers/AccountController.cs#L375

ForgotPassword操作中有一行:

await _emailSender.SendEmailAsync(model.Email,"Reset Password",$"Please reset your password by clicking here: link");

推荐阅读
  • 为何Compose与Swarm之后仍有Kubernetes的诞生?
    探讨在已有Compose和Swarm的情况下,Kubernetes是如何以其独特的设计理念和技术优势脱颖而出,成为容器编排领域的领航者。 ... [详细]
  • 本文介绍了SIP(Session Initiation Protocol,会话发起协议)的基本概念、功能、消息格式及其实现机制。SIP是一种在IP网络上用于建立、管理和终止多媒体通信会话的应用层协议。 ... [详细]
  • Java EE 平台集成了多种服务、API 和协议,旨在支持基于 Web 的多层应用程序开发。本文将详细介绍 Java EE 中的 13 种关键技术规范,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 默认情况下,Git 使用 Nano 编辑器进行提交信息的编辑,但如果您更喜欢使用 Vim,可以通过简单的配置更改来实现这一变化。本文将指导您如何通过修改全局配置文件来设置 Vim 作为默认的 Git 提交编辑器。 ... [详细]
  • 二维码的实现与应用
    本文介绍了二维码的基本概念、分类及其优缺点,并详细描述了如何使用Java编程语言结合第三方库(如ZXing和qrcode.jar)来实现二维码的生成与解析。 ... [详细]
  • 本文介绍了如何在两个Oracle数据库(假设为数据库A和数据库B)之间设置DBLink,以便能够从数据库A中直接访问和操作数据库B中的数据。文章详细描述了创建DBLink前的必要准备步骤以及具体的创建方法。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 解决ASP.NET网站在IIS上无法访问的问题
    探讨常见的ASP.NET网站部署问题及其解决方案,特别是在IIS环境下无法访问网站元数据库的情况。 ... [详细]
  • 本文介绍了 Oracle SQL 中的集合运算、子查询、数据处理、表的创建与管理等内容。包括查询部门号为10和20的员工信息、使用集合运算、子查询的注意事项、数据插入与删除、表的创建与修改等。 ... [详细]
  • PostgreSQL 12 版本预览:分离 max_wal_senders 和 max_connections 的连接槽处理
    本文介绍了 PostgreSQL 12 中的一项重要改进,即 max_wal_senders 参数不再计入 max_connections,从而解决了流复制连接槽不足的问题。 ... [详细]
  • 说明Python教程正在编写中,欢迎大家加微信sinbam提供意见、建议、纠错、催更。drymail是一个邮件发送库,封装了Python的smtplib ... [详细]
  • SvpplyTable: 实现可扩展和可折叠的菜单动画
    SvpplyTable 是一个示例项目,旨在实现类似 Svpply 应用程序中的可扩展和可折叠的菜单动画效果。该项目托管在 GitHub 上,地址为 https://github.com/liuminqian/SvpplyTable。 ... [详细]
  • WCF类型共享的最佳实践
    在使用WCF服务时,经常会遇到同一个实体类型在不同服务中被生成为不同版本的问题。本文将介绍几种有效的类型共享方法,以解决这一常见问题。 ... [详细]
  • Awk是一款功能强大的文本分析与处理工具,尤其在数据解析和报告生成方面表现突出。它通过读取由换行符分隔的记录,并按照指定的字段分隔符来划分和处理这些记录,从而实现复杂的数据操作。 ... [详细]
  • 如何在Django框架中实现对象关系映射(ORM)
    本文介绍了Django框架中对象关系映射(ORM)的实现方式,通过ORM,开发者可以通过定义模型类来间接操作数据库表,从而简化数据库操作流程,提高开发效率。 ... [详细]
author-avatar
暖心我在这_若惜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有