繁体   English   中英

MVC Azure SendGrid

[英]MVC Azure SendGrid

当触发将数据发布到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);
        }
    }

}

但是没有发送电子邮件,我在做什么错了,我如何按照msdn上Rick Andersons帖子中的说明进行修复。

您正在使用指向V2 API的sendgrid C#SDK的过时版本。 当前的API版本是V3。 您所关注的文档未更新。 我目前正在更新文件。 您需要在服务中添加以下名称空间-

using SendGrid;
using SendGrid.Helpers.Mail; //optional if you want to use the MailHelper class

然后在configSendGridasync方法中使用以下代码-

private async Task configSendGridasync(IdentityMessage message)
    {
        var apiKey = Convert.ToString(ConfigurationManager.AppSettings["SendGridApiKey"]);
        var client = new SendGridClient(apiKey);
        var myMessage = new SendGridMessage();
        myMessage.AddTo(new EmailAddress(message.Destination));
        myMessage.SetFrom(new EmailAddress("Joe@contoso.com", "Joe S."));
        myMessage.SetSubject(message.Subject);
        myMessage.AddContent(MimeType.Text, message.Body);
        myMessage.AddContent(MimeType.Html, message.Body);
          try
           {
              var response = await client.SendEmailAsync(msg);
           }
           catch(Exception err)
           {

            Trace.TraceError("Failed to create Web transport: ."+err.message);
            await Task.FromResult(0);
          }  
    }

在编写代码之前,您需要使用以下命令从nuget安装Sendgrid软件包-

Install-Package Sendgrid -Version 9.10.0 

完整的代码如下所示-

using SendGrid;
using SendGrid.Helpers.Mail;

 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 apiKey = Convert.ToString(ConfigurationManager.AppSettings["SendGridApiKey"]);
            var client = new SendGridClient(apiKey);
            var myMessage = new SendGridMessage();
            myMessage.AddTo(new EmailAddress(message.Destination));
            myMessage.SetFrom(new EmailAddress("Joe@contoso.com", "Joe S."));
            myMessage.SetSubject(message.Subject);
            myMessage.AddContent(MimeType.Text, message.Body);
            myMessage.AddContent(MimeType.Html, message.Body);
              try
               {
                  var response = await client.SendEmailAsync(msg);
               }
               catch(Exception err)
               {

                Trace.TraceError("Failed to create Web transport: ."+err.message);
                await Task.FromResult(0);
              }  
        }

}

这是示例代码的链接:

https://github.com/sendgrid/sendgrid-csharp/blob/master/USE_CASES.md

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM