【发布时间】:2015-12-11 08:40:44
【问题描述】:
我有一个新的 MVC 项目,并按照这篇文章在 sendgrid 注册时发送邮件。 http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset
在项目的根目录中创建了一个新文件夹“manager”。在该文件夹中,我创建了一个新文件EmailService.cs,代码如下。
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(
"mymail@gmail.com", "Joe S.");
myMessage.Subject = message.Subject;
myMessage.Text = message.Body;
myMessage.Html = message.Body;
var credentials = new NetworkCredential(
ConfigurationManager.AppSettings["mailAccount"],
ConfigurationManager.AppSettings["mailPassword"]
);
// 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);
}
}
}
使用正确的值将其添加到 web.config
<add key="mailAccount" value="xyz" />
<add key="mailPassword" value="password" />
并用这个修改了我的注册控制器
string code = await UserManager.GenerateEmailConfirmationTokenAsync(user.Id);
var callbackUrl = Url.Action("ConfirmEmail", "Account",
new { userId = user.Id, code = code }, protocol: Request.Url.Scheme);
await UserManager.SendEmailAsync(user.Id,
"Confirm your account", "Please confirm your account by clicking <a href=\""
+ callbackUrl + "\">here</a>");
我什么也没做。我可以注册。没有错误,也没有电子邮件。为什么我需要在项目启动时将EmailService 添加到项目中?
【问题讨论】:
-
只是让你知道你并不孤单,我在使用 SendGrid 时遇到了同样的问题:没有收到电子邮件,SendGrid 发送计数在仪表板中没有增加,也没有抛出异常。如果/当我找到一个答案时,我会发布一个答案:)
标签: c# asp.net asp.net-mvc sendgrid