Sengrid尝试将邮件发送给空收件人,即使给To

问题描述

我们正在通过sendgrid / sendgrid PHP软件包发送电子邮件。尽管此方法在Laravel 6上运行良好,直到上周才出现,但Sengrid似乎不再收到通过$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变量的内容确实像这样:

enter image description here

API调用确实返回状态202,因此一切看起来都很好。但是,sendgrid bakcend中的活动提要中不包含任何收件人-并且不会发送邮件

enter image description here

为什么会发生这种情况?还是有人遇到过同样的经历?

版本: “ sendgrid / sendgrid”:“ 7.8.3”

“ laravel / framework”:“ ^ 8.0”

解决方法

我发现上述行为的原因是模板中的车把代码损坏。上面的php代码是正确的。

我个人觉得API接受发送带有损坏模板的电子邮件的请求并返回202,并确实尝试将其发送给空的收件人,这令人困惑。它对于Sendgrid也很昂贵。我建议不要将具有损坏的模板的电子邮件添加到肯定会失败的发送队列中,而是建议Sendgrid验证模板并阻止具有损坏的电子邮件的发送尝试,并返回错误代码。