没有sendgrid的电子邮件,也没有错误消息

时间:2015-12-11 08:40:45

标签: c# asp.net asp.net-mvc sendgrid

我有一个新的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添加到项目中?

4 个答案:

答案 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内容传递空字符串。一旦我添加了成功发送的消息。