#asp.net #webforms #sendgrid
#asp.net #веб-формы #sendgrid
Вопрос:
У меня есть asp.net приложение (webforms), и я использую SendGrid для отправки запланированных электронных писем.
Электронные письма не получены, и я получаю «отказано в разрешении, неправильные учетные данные», когда я проверяю response.Body.ReadAsStringAsync().Результат
Когда я проверяю значение среды.GetEnvironmentVariable(APIKey) возвращает нулевое значение.
Я получаю ключ SendGrid из webconfig, и он возвращает значение. Я также попытался добавить строку APIKey (SG …) непосредственно в код, и у меня возникла та же проблема.
Я предполагаю, что я должен где-то добавлять учетные данные sendgrid, но где?
Я уже использую этот ApiKey для отправки электронной почты из другого приложения, и это работает, однако я использую SmtpClient для отправки этих электронных писем.
Это код, который я использую:
private async Task TestSendEmail(DateTime SendAt)
{
string APIKey = ConfigurationManager.AppSettings["SendgridAPIKey"].ToString();
var datetimeOffset = new DateTimeOffset(SendAt, TimeSpan.Zero);
var apiKey = Environment.GetEnvironmentVariable(APIKey);
var client = new SendGridClient(apiKey);
//var from = new EmailAddress(QueueEmailAdmin, "Example User");
var from = new EmailAddress("FromEmail@gmail.com");
var subject = "Test Email";
var to = new EmailAddress("myemail@gmail.com", "Example User");
var plainTextContent = "This is a test";
var htmlContent = "<strong>This is a test</strong>";
var msg = MailHelper.CreateSingleEmail(from, to, subject, plainTextContent, htmlContent);
msg.SendAt = datetimeOffset.ToUnixTimeSeconds();
var response = await client.SendEmailAsync(msg).ConfigureAwait(false);
Console.WriteLine(msg.Serialize());
Console.WriteLine(response.StatusCode);
Console.WriteLine(response.Body.ReadAsStringAsync().Result);
}
Комментарии:
1. Я очень смущен. У вас нет значения (ключа API) в web.config? Какую среду вы ожидаете. GetEnvironmentVariable() что делать? Разве вы не должны просто передать свою переменную «APIKey» (в вашей первой строке) конструктору SendGridClient?
2. Да, это то, что я делаю. Однако, если я посмотрю на значение var apiKey = Environment . GetEnvironmentVariable(APIKey); возвращает нулевое значение. Кажется, что он не передает информацию об окружающей среде. Я обновил сообщение, так как забыл упомянуть, что электронные письма не получены, я предполагаю, что это связано с тем, что значение среды не передается переменной apiKey.
3. Я не думаю, что GetEnvironmentVariable() делает то, что вы думаете, что он делает. Это для получения переменных среды, установленных глобально на вашем компьютере. Я предполагаю, что у вас есть фактический ключ API в вашем web.config, не так ли? В этом случае вам следует просто забыть строку
var apiKey = Environment.GetEnvironmentVariable(APIKey);
и использовать результатstring APIKey = ConfigurationManager.AppSettings["SendgridAPIKey"].ToString();
в конструктореvar client = new SendGridClient(APIKey);
Ответ №1:
Вы должны написать так…
Environment.SetEnvironmentVariable("SENDGRID_API_KEY", APIKey);
var apikey = Environment.GetEnvironmentVariable("SENDGRID_API_KEY");
var client = new SendGridClient(apikey);