SendGrid没有发送电子邮件

时间:2016-08-16 14:33:35

标签: c# razor sendgrid

我一直在关注本教程:http://www.asp.net/mvc/overview/security/create-an-aspnet-mvc-5-web-app-with-email-confirmation-and-password-reset。我现在经历了三次并检查了几个Stackoverflow帖子,但我仍然不知道我错过了什么。通过调试,Visual Studio显示myMessage具有所需的全部内容(要发送到的电子邮件地址,邮件主题,邮件正文,来自哪里等),但在测试时我实际上并没有收到确认电子邮件。这是我目前的代码:

IdentityConfig.cs

public class EmailService : IIdentityMessageService
{
    public async Task SendAsync(IdentityMessage message)
    {
        // Plug in your email service here to send an email.
        // line below was commented out and replaced upon tutorial request
        //return Task.FromResult(0);
        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(
                            "myActualEmail@email.com", "Robert");
        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);
        }
    }
}

AccountController:

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.UserName, Email = model.Email };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                // commented below code and RedirectToAction out so it didn't auto log you in.
                //await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                //For more information on how to enable account confirmation and password reset please visit http://go.microsoft.com/fwlink/?LinkID=320771
                //Send an email with this link
                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>");

                ViewBag.Message = "Check your email and confirm your account, you must be confirmed before you can log in.";

                return View("Info");

                //return RedirectToAction("Index", "Home");
            }
            AddErrors(result);
        }

        // 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="webpages:Enabled" value="false" />
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />

    <add key="mailAccount" value="azure_d8aedad6a68a0dc1dc8axxxxxxxxxxxx@azure.com" /> <!--the mailAccount that SendGrid gave me through Azure marketplace to use-->
    <add key="mailPassword" value="xxxxxx" /> <!--password taken out, but I used the one from SendGrid-->
</appSettings>

代码构建并运行没有错误,但我在测试时从未收到实际的电子邮件(我使用了两个单独的gmail帐户和一个yahoo帐户)。任何建议/帮助将不胜感激!

1 个答案:

答案 0 :(得分:3)

您似乎可以使用web.config文件中使用MailMessage配置的dotNet SmtpClient<system.net> <mailSettings> <smpt>

发送:

    var mailMessage = new MailMessage(...);
    var smtpClient = new SmtpClient();
    smtpClient.Send(message);

.config中的SendGrid配置:

<system.net>
    <mailSettings>
        <smtp deliveryMethod="Network" from="MYFROM@example.com">
            <network host="smtp.sendgrid.net" password="PASS`"
                     userName="YOURNAME_AZURE_SENDGRID_USERNAME@azure.com" port="587" />
        </smtp>
    </mailSettings>
</system.net>