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)上述方法中的行时,此错误都会显示在浏览器中:
异常详细信息: 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方法生成.遗憾的是,结果相同.
有没有人碰巧有什么可能导致它无法正常运作?
这可能是您的凭据存在问题.
如果您通过Windows Azure注册了SendGrid,则需要执行以下操作:
Azure PortalMarketplaceSendGrid应用程序Connection InfoUsername和Password列出.我最初的印象是我要使用我的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);
}
Run Code Online (Sandbox Code Playgroud)
即使它不使用SendGrid的C#API,消息仍会显示在我的SendGrid仪表板上.