【问题标题】:ASP.NET MVC sendgrid email deliverability failASP.NET MVC sendgrid 电子邮件传递失败
【发布时间】:2016-05-08 15:05:07
【问题描述】:

我正在尝试在我的 ASP.NET MVC 应用程序中发送标准电子邮件以进行标准帐户验证,但电子邮件没有发送,甚至没有发送……我在 sendgrid 仪表板上的所有设置都设置为默认值,

在 sendgrid 仪表板菜单中的“IP 访问管理”选项卡上,我在“最近访问尝试”列表中看到了我的 IP 地址,因此我认为来自我的应用程序的连接正在尝试建立...

我正在尝试通过我在 Azure 上托管的站点生成的 API 密钥进行连接。

我正在使用 Sendgrid C# 客户端库 v6.3.4。和 Sendgrid Smtp.Api v1.3.1。通过 NuGet 安装

这是我的代码示例:

public class EmailService : IIdentityMessageService
{
    public async Task SendAsync(IdentityMessage message)
    {
        await configSendGridasync(message);

    }
    private async Task configSendGridasync(IdentityMessage message)
    {
        var myMessage = new SendGridMessage();
        myMessage.AddTo(message.Destination);
        myMessage.From = new MailAddress("Joe@contoso.com", "Joe S.");
        myMessage.Subject = message.Subject;
        myMessage.Text = message.Body;
        myMessage.Html = message.Body;

        var transportWeb = new Web("SG.sendgrid general api key blah blah blah");

        if (transportWeb != null)
        {
            await transportWeb.DeliverAsync(myMessage);
        }
        else
        {
            Trace.TraceError("Failed to create Web transport.");
            await Task.FromResult(0);
        }
    }
}

这是我的注册控制器:

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> _Register(BigViewModel model)
{
    if (ModelState.IsValid)
    {
        var user = new ApplicationUser { UserName = model.RegisterViewModel.Email, Email = model.RegisterViewModel.Email };
        var result = await UserManager.CreateAsync(user, model.RegisterViewModel.Password);
        if (result.Succeeded)
        {
            //  Comment the following line to prevent log in until the user is confirmed.
             // 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>");

            // Uncomment to debug locally
            // TempData["ViewBagLink"] = callbackUrl;

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

            return View("Info");

        }
        AddErrors(result);
    }

    return View("Register");

}

问题出在哪里?

提前致谢。

【问题讨论】:

标签: asp.net asp.net-mvc email sendgrid


【解决方案1】:
 private async Task configSendGridasync(IdentityMessage message,FormCollection fc)
{
    var myMessage = new SendGridMessage();
    myMessage.AddTo(message.Destination);
    myMessage.From = new MailAddress("YourEmail", "Joe S.");
    myMessage.AddTo(fc["Email"]);
    myMessage.Subject = message.Subject;
    myMessage.Text = message.Body;
    myMessage.Html = message.Body;
    var credentials = new NetworkCredential(
             ConfigurationManager.AppSettings["mailAccount"],
             ConfigurationManager.AppSettings["mailPassword"]
             );
    var transportWeb = new Web(credentials);

    if (transportWeb != null)
    {
        await transportWeb.DeliverAsync(myMessage);
    }
    else
    {
        Trace.TraceError("Failed to create Web transport.");
        await Task.FromResult(0);
    }
}

试试这个兄弟。

<appSettings>   
  <add key="webpages:Version" value="3.0.0.0" />
  <!-- Markup removed for clarity. -->      
  <add key="mailAccount" value="xyz" />
  <add key="mailPassword" value="password" />
</appSettings>

将应用设置存储在 web.config 文件中...

【讨论】:

  • 哟。我之前尝试过这种方法但没有任何结果......只是为了确保......在网络配置中,“邮件帐户值”属性是用于 sengrid 帐户登录的吗?
  • @joint_ops 对不起....我已经更新了 sn-p... myMessage.AddTo("EmailTOSend@example.com");不见了……再试一次兄弟……
  • 我认为添加 myMessage.AddTo("EmailTOSend@example.com") 并不是一个好主意,因为我想将邮件发送到用户在我的注册中键入的电子邮件地址。表单输入,但我尝试过这种方法也没有结果......如果这个解决方案在您的项目上运行良好,您可以发布您的注册控制器吗?我将尝试进行一些复制和粘贴实现,看看会发生什么。 ..和平
  • @joint_ops 好的,我明白了....我已经更新了 sn-p...使用 FormCollection Input...Fc["Email"] 从您的输入标签中获取价值,ID= “电子邮件”名称=“电子邮件”。
  • 仅供参考,使用 var transportWeb = new Web("SG.sendgrid general api key blah blah blah");比使用 var credentials = new NetworkCredential( ConfigurationManager.AppSettings["mailAccount"], ConfigurationManager.AppSettings["mailPassword"] ) 更可取(也是更好的做法); var transportWeb = new Web(凭据);
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-06
相关资源
最近更新 更多