Sengrid пытается отправить почту пустому получателю, несмотря на то, что задано To

#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 проверяет шаблоны и блокирует попытки отправки писем с поврежденными письмами, возвращая код ошибки.