Учебник SendGrid, приводящий к неправильному запросу
я прошу прощения, если это дурацкий вопрос, но я не нашел никакой надежной информации об этой проблеме ни на этом сайте, ни на других.
С учетом сказанного, я работаю над веб-приложением MVC 5. Я следую в этом уроке на 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)
строка в приведенном выше методе эта ошибка отображается в браузере:
ошибка сервера в '/' Приложение.
Неверный Запрос
описание: необработанное исключение при выполнении текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительных сведений об ошибке и где было задано в коде.Сведения Об Исключении:
8 ответов
это может быть проблема с вашими учетными данными.
если вы зарегистрировались в SendGrid через Windows Azure, вам необходимо сделать следующее:
- войдите в свой
Azure Portal
- перейти к
Marketplace
- найдите и нажмите на кнопку
SendGrid
приложение - внизу внизу, нажмите на
Connection Info
- использовать
Username
и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);
}
хотя он не использует API c# SendGrid, сообщения все еще отображаются на моей панели мониторинга SendGrid.
убедитесь, что вы используете правильное "имя пользователя" в качестве параметра "mailAccount".
Это должно быть ваше имя пользователя sendgrid,не адрес электронной почты учетной записи, которую вы пытаетесь отправить почту.
Я получил ту же ошибку. Все, что мне нужно было сделать, это скопировать appsettings в webconfig (см. ниже) и вставить его в другой файл webconfig (есть 2 из них в asp.net проект).
<add key="webpages:Version" value="3.0.0.0" />
<add key="mailAccount" value="xxUsernamexx" />
<add key="mailPassword" value="Password" />
Я создал учетную запись SendGrid через Azure, Я исправил это, установив эти значения в моей сети.Файл конфигурации:
<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);
У меня была та же проблема, так получилось, что имя значения конфигурации для 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 ответ.
домен компании, зарегистрированный в SendGrid, должен использоваться для вызова API MailAddress. Таким образом, если ваш веб-сайт компании вы регистрируетесь в SendGrid это www.###.com
вы должны использовать:
var from = MailAddress("info@###.com", "Your Contractor Connection")