我有一个新的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
添加到项目中?
答案 0 :(得分:1)
将我的代码添加到identityconfig,现在它可以正常工作。
答案 1 :(得分:0)
我以前没有使用过Sendgrid,但看起来你错过了他们在第14行here列出的API KEY:
var credentials = new NetworkCredential(api_user, api_key);
答案 2 :(得分:0)
对于其他可能正在试图收到他们的第一封SendGrid电子邮件的人,这里简要介绍一下我的经历:
我能够通过.NET SmtpClient
发送电子邮件,而不会收到任何错误消息。但是,这些电子邮件似乎永远丢失在SendGrid内部,因为它们既没有发送也没有出现在SendGrid仪表板上的“今日发送的电子邮件”计数器中。我没有看到我的帐户被配置的迹象。但是,当我第二天再次尝试时,收到了我的电子邮件。
答案 3 :(得分:0)
我有同样的问题。事实证明,我的问题是,当使用SendGrid.Helpers.Mail.MailHelper类生成消息时,我正在为纯文本和html内容传递空字符串。一旦我添加了成功发送的消息。