【发布时间】:2018-10-14 16:09:15
【问题描述】:
当触发将数据发布到 ForgotPassword 方法时,我有一个控制器操作方法:
[ValidateAntiForgeryToken]
public async Task<ActionResult> ForgotPassword(ForgotPasswordViewModel model)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindByNameAsync(model.Email);
if (user == null || !(await UserManager.IsEmailConfirmedAsync(user.Id)))
{
// Don't reveal that the user does not exist or is not confirmed
return View("ForgotPasswordConfirmation");
}
string code = await UserManager.GeneratePasswordResetTokenAsync(user.Id);
var callbackUrl = Url.Action("ResetPassword", "Account", new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id, "Reset Password", "Please reset your password by clicking <a href=\"" + callbackUrl + "\">here</a>");
return RedirectToAction("ForgotPasswordConfirmation", "Account");
}
// If we got this far, something failed, redisplay form
return View(model);
}
web.config 文件
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
<add key="SendGridUsername" value="XXXXXXXXXXXXXXXXXXXXXX" />
<add key="SendGridPassword" value="XXXXXXXXXXXXXX" />
<add key="SendGridApiKey" value="XXXXXXXXXXXXXXXXXXXXXXXXXXXX" />
</appSettings>
我的 IdentityConfig 文件如下所示:
public class EmailService : IIdentityMessageService
{
public async Task SendAsync(IdentityMessage message)
{
await configSendGridasync(message);
}
// Use NuGet to install SendGrid (Basic C# client lib)
private async Task configSendGridasync(IdentityMessage message)
{
var myMessage = new SendGridMessage();
myMessage.AddTo(message.Destination);
myMessage.From = new System.Net.Mail.MailAddress(
"Joe@contoso.com", "Joe S.");
myMessage.Subject = message.Subject;
myMessage.Text = message.Body;
myMessage.Html = message.Body;
var credentials = new NetworkCredential(
ConfigurationManager.AppSettings["SendGridUsername"],
ConfigurationManager.AppSettings["SendGridPassword"]
);
// Create a Web transport for sending email.
var transportWeb = new Web(credentials);
// Send the email.
if (transportWeb != null)
{
await transportWeb.DeliverAsync(myMessage);
}
else
{
Trace.TraceError("Failed to create Web transport.");
await Task.FromResult(0);
}
}
}
但是没有发送电子邮件,我做错了什么以及如何解决这个问题,因为我已按照 Rick Andersons 在 msdn 上发布的说明进行操作。
【问题讨论】:
-
你有什么错误吗?你能告诉我们堆栈跟踪吗
-
没有错误,就好像发送了电子邮件,当我检查 sendGrid 网站仪表板发送的电子邮件为 0
-
你能告诉我们你得到的回应吗?
-
没有错误信息
-
可能是 SendGrid 的配置问题。
标签: c# model-view-controller sendgrid