Учебник 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, вам необходимо сделать следующее:

  1. войдите в свой Azure Portal
  2. перейти к Marketplace
  3. найдите и нажмите на кнопку SendGrid приложение
  4. внизу внизу, нажмите на Connection Info
  5. использовать 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")