SendGrid教程导致错误请求

And*_*ers 9 c# email asp.net-mvc sendgrid asp.net-mvc-5

如果这是一个愚蠢的问题,我很抱歉,但是我没有在本网站或其他网站上找到有关此问题的任何可靠信息.

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

每次到达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:             }
Run Code Online (Sandbox Code Playgroud)

我在https://sendgrid.com/上注册了一个免费帐户,使用"免费套餐谷歌",每月给我25,000个学分.该帐户已经配置.

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

我试着明确设置subject而不是使用message.Subject,正如这篇文章建议的那样.我也尝试HttpUtility.UrlEncode了这里建议callbackUrl的Account/Register方法生成.遗憾的是,结果相同.

有没有人碰巧有什么可能导致它无法正常运作?

Fra*_*nkO 6

这可能是您的凭据存在问题.

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

  1. 登录您的 Azure Portal
  2. 导航到 Marketplace
  3. 找到并单击该SendGrid应用程序
  4. 在底部,点击 Connection Info
  5. 使用Username和Password列出.

我最初的印象是我要使用我的Azure帐户密码,直到我找到它.希望这可以纠正你的问题,就像它对我一样.


And*_*ers 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);
}
Run Code Online (Sandbox Code Playgroud)

即使它不使用SendGrid的C#API,消息仍会显示在我的SendGrid仪表板上.