C# SendGrid教程导致错误的请求

C# SendGrid教程导致错误的请求,c#,asp.net-mvc,email,asp.net-mvc-5,sendgrid,C#,Asp.net Mvc,Email,Asp.net Mvc 5,Sendgrid,我很抱歉,如果这是一个重复的问题,但我没有找到任何关于这个问题的可靠信息,无论是在这个网站上还是在其他网站上 说到这里,我正在开发一个MVC5Web应用程序。我正在ASP.net上进行跟踪 public async Task SendAsync(IdentityMessage message) { await configSendGridasync(message); } private async Task configSendGridasync(IdentityMessage me

我很抱歉,如果这是一个重复的问题,但我没有找到任何关于这个问题的可靠信息,无论是在这个网站上还是在其他网站上

说到这里,我正在开发一个MVC5Web应用程序。我正在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);
    }
}
每次它到达上述方法中的
wait transportWeb.sendaync(myMessage)
行时,浏览器中会显示此错误:


“/”应用程序中出现服务器错误。 错误的请求 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

异常详细信息:系统。异常:错误请求

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:             }

我在注册了一个免费帐户,使用“免费软件包谷歌”,每月给我25000个积分。该帐户已设置

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

我尝试显式设置
主题
,而不是按照建议使用
message.subject
。我还在
Account/Register
方法中生成的
callbackUrl
上尝试了
HttpUtility.UrlEncode
。不幸的是,同样的结果


是否有人对导致此功能无法正常运行的原因有所了解?

可能是您的凭据有问题

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

  • 登录您的
    Azure门户
  • 导航到
    市场
  • 找到并单击
    SendGrid
    应用程序
  • 在底部,单击连接信息
  • 使用列出的
    用户名
    密码

  • 我最初的印象是,在我找到这个之前,我一直在使用我的Azure帐户密码。希望这能像为我所做的那样纠正您的问题。

    我最终使用内置的
    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仪表板上。

    检查您是否使用了正确的“用户名”作为“邮件帐户”设置


    这应该是您的sendgrid用户名,而不是您试图从中发送的帐户的电子邮件地址。

    我也遇到了同样的问题,碰巧拼错了mailAccount的配置值的名称(将mainAccount改为mailAccount)


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

    我遇到了相同的错误。我所要做的就是复制webconfig中的appsettings(见下文)并将其粘贴到另一个webconfig文件中(asp.net项目中有两个)


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

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

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

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

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

    我也遇到了这个问题。通过添加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);
    
    var-client=newsendGridClient(\u apiKey);
    var from=新的电子邮件地址(\u fromEmailAddress,\u fromName);
    var to=新的电子邮件地址(“devanathan。s@somedomain.com","发展";;
    var textcontent=“这是为了测试邮件功能”;
    var htmlcontent=“Devanathan测试邮件”;
    var subject=“通过发送邮件进行测试”;
    var msg=MailHelper.CreateSingleEmail(from、to、subject、textcontent、htmlcontent);
    var response=wait client.sendmailasync(msg);
    
    @DJKRAZE我使用VS2013社区版中的NuGet获得最新的SendGrid。您链接的文件包与我的文件包不同吗?另外,请注意,在该教程中,“mailAccount”设置应设置为您的sendgrid用户名,而不是帐户的电子邮件地址。创建sendgrid资源时会生成用户名,而不是提供的名称。var creds=new NetworkCredential(Properties.Resources.SendGridUser、Properties.Resources.SendGridPassword);此处不显示Properties.Resources.SendGridUser和Properties.Resources.SendGridPasswordfound@Rashedul.Rubel这些都嵌入在程序的资源文件中。它们是字符串值。我在发布之前尝试将它们硬编码,然后找到解决方案,然后发布。我完全按照这里描述的内容进行操作,但是我收到:“服务器违反了协议”…任何帮助都将是免费的appreciated@a.boussema确保您使用的是sendgrid用户名,而不是电子邮件地址。服务器应该是smtp.sendgrid.net。也可以使用您的端口;我相信在我最终使用它之前,我尝试了三到四个端口。@Anders:非常感谢。我的问题是没有支付账单:))这个错误消息非常令人困惑,我不得不花上几个小时才能弄清楚。
    <add key="mailAccount" value="azure_************@azure.com" />
    <add key="mailPassword" value="[My Azure Password]" />
    
    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);