【发布时间】:2020-06-09 04:28:18
【问题描述】:
我试图找出为什么在创建新用户帐户时没有从我的应用发送帐户验证电子邮件。
在我的第一次尝试中,我能够发送两封电子邮件。这些电子邮件最终进入了我的垃圾邮件过滤器,但它们确实通过了。我不知道从那以后可能发生了什么变化。
检查 SendGrid 控制面板,我可以确认在我尝试的第一天发送了两封电子邮件,但我以后的尝试都没有生成任何电子邮件。
This article 建议在EmailSender.Execute 上设置断点。我这样做了,发现它确实没有被击中。如何进一步调试?
SendGrid 账户信息在secrets.json 中指定:
{
"SendGridUser": "{account name}",
"SendGridKey": "{api-key}"
}
在 Startup.cs 中配置了一个服务:
services.AddTransient<IEmailSender, EmailSender>();
services.Configure<AuthMessageSenderOptions>(Configuration);
AuthMessageSenderOptions:
public class AuthMessageSenderOptions
{
public string SendGridUser { get; set; }
public string SendGridKey { get; set; }
}
EmailSender 服务:
public class EmailSender : IEmailSender
{
public EmailSender(IOptions<AuthMessageSenderOptions> optionsAccessor)
{
Options = optionsAccessor.Value;
}
public AuthMessageSenderOptions Options { get; } //set only via Secret Manager
public Task SendEmailAsync(string email, string subject, string message)
{
return Execute(Options.SendGridKey, subject, message, email);
}
public Task Execute(string apiKey, string subject, string message, string email)
{
var client = new SendGridClient(apiKey);
var msg = new SendGridMessage()
{
From = new EmailAddress("my@email.com", Options.SendGridUser),
Subject = subject,
PlainTextContent = message,
HtmlContent = message
};
msg.AddTo(new EmailAddress(email));
// Disable click tracking.
// See https://sendgrid.com/docs/User_Guide/Settings/tracking.html
msg.SetClickTracking(false, false);
return client.SendEmailAsync(msg);
}
}
一个用户是这样创建的:
// user is an ApplicationUser-object
IdentityResult result = await userManager.CreateAsync(auto.Map<ApplicationUser>(user), "P&55w0rd");
if (result.Succeeded)
{
ApplicationUser u = await userManager.FindByNameAsync(user.UserName);
if (u != null)
{
// newUser.RN is the role name to be assigned to the new user
await userManager.AddToRoleAsync(u, newUser.RN);
}
return RedirectToAction("Details", new { id = user.Id });
}
else
{
foreach (var error in result.Errors)
{
ModelState.AddModelError("", error.Description);
}
}
创建了一个新用户,添加到该角色,我们被重定向到用户/详细信息/{id},但未发送帐户验证电子邮件。
【问题讨论】:
-
您包含的代码与发送电子邮件无关。请查看on-topic 指南:寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码
-
@HoomanBahreini 我知道。我包含的代码显示了如何创建用户。电子邮件的发送由身份处理,我没有代码。
-
@HoomanBahreini 我在问题中添加了更多相关信息。我认为您可以取消投票以结束投票。
标签: c# sendgrid asp.net-core-identity