#php #laravel #email #sendgrid #laravel-8
#php #laravel #Адрес электронной почты #sendgrid #laravel-8
Вопрос:
Мы отправляем электронные письма через php-пакет sendgrid / sendgrid. Хотя это хорошо работало до прошлой недели на Laravel 6, похоже, что Sengrid больше не получает получателей, добавленных via $email->addTo("foo@bar.com", "Foo Bar");
. На прошлой неделе мы обновили vom laravel6 до laravel8, однако я сомневаюсь, что это действительно связано.
$email = new Mail();
$email->setTemplateId('myTemplateId');
$email->setFrom('sender@test.com', 'Contact Form');
$email->addTo('foo@bar.com', "Foo Bar");
$email->addBcc('blabla@blabla.com', 'Blabla');
$email->setReplyTo($request->email, $request->name);
$email->setSubject("ZMy Subject");
$email->addDynamicTemplateDatas([
'name' => $request->name,
'email' => $request->email,
'subject' => $request->subject,
'message' => $request->message,
'company' => $company->company_name,
'subscribe' => $request->subscribe ? 'ja' : 'nein'
]);
//dd($email);
$sendgrid = new SendGrid(getenv('SENDGRID_API_KEY'));
try {
$response = $sendgrid->send($email);
if ($response->statusCode() != "202") {
throw new Exception('Email exception: ' . $response->body());
}
$emailSent = true;
} catch (Throwable $e) {
throw new Exception('Email exception: ' . $e->getMessage());
$emailSent = false;
}
Содержимое $email
переменной выглядит следующим образом:
Вызов API возвращает статус 202, так что все выглядит нормально. Однако лента активности в sendgrid bakcend не содержит никакого получателя, и почта не отправляется.
Есть идеи, почему это происходит? Или кто-нибудь испытывает то же самое?
Версия: «sendgrid / sendgrid»: «7.8.3»
«laravel / framework»: «^ 8.0»
Ответ №1:
Я обнаружил, что причиной поведения aboves был поврежденный код handlebars в шаблоне. Приведенный выше php-код был правильным.
Лично меня смущает, что API принимает запросы на отправку электронных писем с поврежденными шаблонами и возвращает 202 и фактически пытается отправить его пустому получателю. Это также дорого для Sendgrid. Вместо добавления письма с поврежденным шаблоном в очередь отправки, где оно определенно завершится неудачей, я бы предположил, что Sendgrid проверяет шаблоны и блокирует попытки отправки писем с поврежденными письмами, возвращая код ошибки.