SendGrid教程导致错误请求

时间:2014-11-24 20:20:54

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

如果这是一个欺骗性问题,我道歉,但我在本网站或其他网站上未发现有关此问题的任何可靠信息。

话虽如此,我正在研究MVC 5 Web应用程序。我在ASP.net上关注this tutorial

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 System.Net.Mail.MailAddress(
                        "info@ycc.com", "Your Contractor Connection");
    myMessage.Subject = message.Subject;
    myMessage.Text = message.Body;
    myMessage.Html = message.Body;

    var credentials = new NetworkCredential(
         Properties.Resources.SendGridUser,
         Properties.Resources.SendGridPassword,
         Properties.Resources.SendGridURL // necessary?
         );

    // 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);
    }
}

每次进入上述方法的await transportWeb.SendAsync(myMessage)行时,此错误都会显示在浏览器中:


' /'中的服务器错误应用

错误请求

描述:在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

异常详细信息: System.Exception:错误请求

Line 54:             if (transportWeb != null)
Line 55:             {
Line 56:                 await transportWeb.DeliverAsync(myMessage);
Line 57:             }
Line 58:             else
Line 59:             {
Line 60:                 Trace.TraceError("Failed to create Web transport.");
Line 61:                 await Task.FromResult(0);
Line 62:             }

我使用"免费套餐Google"在https://sendgrid.com/注册了一个免费帐户,每月为我提供25,000个学分。该帐户已经配置。

到目前为止,我尝试了很多方法,包括:禁用SSL,将用户名/密码直接放在代码中,而不是从Resources.resx文件中提取它们,在NetworkCredential对象中指定SMTP服务器,并尝试将DeliverAsync(...)更改为Deliver()

我尝试明确设置subject,而不是使用message.Subject,因为this post建议。我还在HttpUtility.UrlEncode方法中生成的callbackUrlAccount/Register尝试{{1}} suggested here。不幸的是,结果相同。

是否有人对可能导致其无法正常运作的原因有所了解?

8 个答案:

答案 0 :(得分:6)

您的凭据可能存在问题。

如果您通过Windows Azure注册了SendGrid,则需要执行以下操作:

  1. 登录到您的Azure Portal
  2. 导航至Marketplace
  3. 找到并点击SendGrid应用
  4. 点击底部,点击Connection Info
  5. 使用列出的UsernamePassword
  6. 我最初的印象是我要使用我的Azure帐户密码,直到找到这个。希望这能够像对待我一样纠正你的问题。

答案 1 :(得分:6)

我最终使用内置SmtpClient来实现此功能。这是我正在使用的代码:

private async Task configSendGridasync(IdentityMessage message)
{
    var smtp = new SmtpClient(Properties.Resources.SendGridURL,587);

    var creds = new NetworkCredential(Properties.Resources.SendGridUser, Properties.Resources.SendGridPassword);

    smtp.UseDefaultCredentials = false;
    smtp.Credentials = creds;
    smtp.EnableSsl = false;

    var to = new MailAddress(message.Destination);
    var from = new MailAddress("info@ycc.com", "Your Contractor Connection");

    var msg = new MailMessage();

    msg.To.Add(to);
    msg.From = from;
    msg.IsBodyHtml = true;
    msg.Subject = message.Subject;
    msg.Body = message.Body;

    await smtp.SendMailAsync(msg);
}

即使它没有使用SendGrid的C#API,这些消息仍会显示在我的SendGrid信息中心上。

答案 2 :(得分:2)

检查您是否使用了正确的"用户名"作为" mailAccount"设置。

这应该是您的sendgrid用户名,您尝试发送的帐户的电子邮件地址。

答案 3 :(得分:1)

我得到了同样的错误。我所要做的就是在webconfig中复制appsettings(见下文)并将其粘贴到OTHER webconfig文件中(asp.net项目中有2个)。

<add key="webpages:Version" value="3.0.0.0" />
<add key="mailAccount" value="xxUsernamexx" />
<add key="mailPassword" value="Password" />

答案 4 :(得分:1)

我通过Azure创建了一个SendGrid帐户, 我通过在Web.Config文件中设置这些值来修复此问题:

<add key="mailAccount" value="azure_************@azure.com" />
<add key="mailPassword" value="[My Azure Password]" />

到我的azure用户名和密码。我从Azure仪表板找到的用户名,我导航到SendGrid帐户&gt;&gt; [点击我创建的资源]&gt;&gt;配置。密码与我设置Azure帐户的密码相同。

答案 5 :(得分:0)

我也遇到过这个问题。通过添加textcontent和htmlcontent来解决。在我发送空字符串之前。现在它正在工作 代码

var client = new SendGridClient(_apiKey);
            var from = new EmailAddress(_fromEmailAddress, _fromName);
            var to = new EmailAddress("devanathan.s@somedomain.com", "dev");
            var textcontent = "This is to test the mail functionality";
            var htmlcontent = "<div>Devanathan Testing mail</div>";
            var subject = "testing by sending mail";
            var msg = MailHelper.CreateSingleEmail(from, to, subject, textcontent, htmlcontent);
            var response = await client.SendEmailAsync(msg);

答案 6 :(得分:-1)

我遇到了同样的问题,碰巧拼错了mailAccount的配置值的名称(放入mainAccount而不是mailAccount)。

        NetworkCredential credential = new NetworkCredential(ConfigurationManager.AppSettings["mailAccount"], ConfigurationManager.AppSettings["mailPassword"]);
        Web transportWeb = new Web(credential);

配置值返回为null但未引发异常,而是分配了空用户名。基本上,把断点放在“Web transportWeb = new Web(credential);”这一行上。并查看您实际传递的凭证中的用户名/密码,另请参阅nevada_scout的答案。

答案 7 :(得分:-1)

您在SendGrid中注册的公司域应该用于调用MailAddress API。因此,如果您在SendGrid中注册的公司网站是www.###.com,则应使用:

var from = MailAddress("info@###.com", "Your Contractor Connection")