我们通过 sendgrid/sendgrid php 包发送电子邮件。虽然直到上周在 Laravel 6 上这都运行良好,但似乎 Sengrid 不再接收通过
$email->addTo("[email protected]", "Foo Bar");
添加的收件人。上周我们将 vom laravel6 升级到了 laravel8,但我怀疑这是否真的相关。
$email = new Mail();
$email->setTemplateId('myTemplateId');
$email->setFrom('[email protected]', 'Contact Form');
$email->addTo('[email protected]', "Foo Bar");
$email->addBcc('[email protected]', '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 中的活动源不包含任何收件人 - 并且邮件未发送。
有什么想法为什么会发生这种情况吗?或者有人有同样经历吗
版本: “发送网格/发送网格”:“7.8.3”
“laravel/框架”:“^8.0”
我发现上述行为的原因是模板中的车把代码损坏。上面的 php 代码本身是正确的。
我个人觉得令人困惑的是,API 接受发送带有损坏模板的电子邮件的请求并返回 202,并且实际上尝试将其发送给空收件人。 Sendgrid 的价格也很昂贵。我建议 Sendgrid 验证模板并阻止发送带有损坏电子邮件的电子邮件的尝试,而不是将带有损坏模板的电子邮件添加到肯定会失败的发送队列中,并返回错误代码。
如果模板本身没问题,但你传入的ID不正确,也会出现这种情况!就我而言,我为来自不同 SendGrid 帐户的模板传递动态模板 ID。 API 调用返回 202 Accepted,但电子邮件的显示方式与控制台中的屏幕截图相同。