发送网格教程导致错误请求
本文关键字:错误 请求 教程 网格 | 更新日期: 2023-09-27 18:31:43
如果这是一个欺骗性的问题,我深表歉意,但我在这个网站或其他网站上都没有找到关于这个问题的任何可靠信息。
话虽如此,我正在开发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);
}
}
每次到达上述方法中的await transportWeb.SendAsync(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: }
我在 https://sendgrid.com/注册了一个免费帐户,使用"免费套餐Google",每月给我25,000个积分。帐户已预配。
到目前为止,我已经尝试了很多事情,包括:禁用SSL,将用户名/密码直接放在代码中而不是从Resources.resx
文件中提取它们,在NetworkCredential
对象内指定SMTP服务器,还尝试将DeliverAsync(...)
更改为Deliver()
。
我尝试显式设置subject
而不是使用 message.Subject
,正如这篇文章所建议的那样。我还尝试了HttpUtility.UrlEncode
此处建议的Account/Register
方法中生成的callbackUrl
。不幸的是,相同的结果。
有没有人碰巧对可能导致它无法正常运行的原因有一些见解?
我最终使用内置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仪表板上。
可能是您的凭据有问题。
如果您通过 Windows Azure 注册了 SendGrid,则需要执行以下操作:
- 登录您的
Azure Portal
- 导航到
Marketplace
- 找到并单击
SendGrid
应用程序 - 在底部,点击
Connection Info
- 使用列出的
Username
和Password
。
我最初的印象是我要使用我的 Azure 帐户密码,直到我发现这个。 希望这能像我一样纠正您的问题。
检查您是否使用正确的"用户名"作为"邮件帐户"设置。
这应该是您的 sendgrid 用户名,而不是您尝试发送的帐户的电子邮件地址。
我通过Azure创建了一个SendGrid帐户,我通过在 Web.Config 文件中设置这些值来解决此问题:
<add key="mailAccount" value="azure_************@azure.com" />
<add key="mailPassword" value="[My Azure Password]" />
到我的 Azure 用户名和密码。 我从 Azure 仪表板中找到的用户名,我导航到 SendGrid 帐户>> [单击我创建的资源]>>配置。该密码与我设置 Azure 帐户时使用的密码相同。
我也遇到了这个问题。 通过添加文本内容和 HTML 内容来解决。在我发送空字符串之前,现在它可以工作下面的代码
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);
我遇到了同样的错误。我所要做的就是复制 webconfig 中的应用程序设置(见下文)并将其粘贴到 OTHER webconfig 文件中(asp.net 项目中有 2 个)。
<add key="webpages:Version" value="3.0.0.0" />
<add key="mailAccount" value="xxUsernamexx" />
<add key="mailPassword" value="Password" />
我遇到了同样的问题,问题是我在 TO 和密件抄送字段上有相同的电子邮件。希望它能帮助别人。
我遇到了同样的问题,碰巧拼错了邮件帐户的配置值的名称(放置主帐户而不是邮件帐户)。
NetworkCredential credential = new NetworkCredential(ConfigurationManager.AppSettings["mailAccount"], ConfigurationManager.AppSettings["mailPassword"]);
Web transportWeb = new Web(credential);
配置值返回为 null,但未引发异常,而是分配了空用户名。基本上,将断点放在"Web transportWeb = new Web(credential);"行上,看看你实际传递凭据的用户名/密码,并查看nevada_scout的答案。
您在 SendGrid 中注册的公司域应用于调用邮件地址 API。因此,如果您在 SendGrid 中注册的公司网站www.###.com
则应使用:
var from = MailAddress("info@###.com", "Your Contractor Connection")