php - 如何调试 Symfony Mailer 交付问题?
问题描述
我正在处理我的第一个 Symfony 5 项目,并且很难使用内置的MailerInterface
. 我之前在 Symfony 3 中使用过 Swift Mailer,之前从未遇到过类似的问题。
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Mailer\MailerInterface;
...
class SomeController extends AbstractController {
public someAction(Request $request, MailerInterface $mailer) {
...
$email = (new TemplatedEmail())
->from(new Address('address@example.com', 'My Symfony Mail'))
//->to($user->getEmail())
->to('receiver@example.com')
->subject('Subject')
->htmlTemplate('email.html.twig');
$mailer->send($email);
}
}
// .env
#MAILER_DSN=smtp://user:pass@smtp.example.com:25
MAILER_DSN=sendmail://default
如果MAILER_DSN
格式不正确,则会抛出异常并显示在 Symfony 调试器页面上,例如The "invaliddsn" mailer DSN must contain a scheme
……因此,配置的 DSN 似乎smtp://user:pass@smtp.example.com:25
是正确的。在其他邮件应用程序中使用相同的凭据、主机和端口是没有问题的。
但是,当使用此代码时,不会显示错误/异常,并且我根本没有收到任何邮件。当然,我已经仔细检查了日志(没有错误),接收者垃圾邮件文件夹(没有)。指定 SMTP 服务器或 sendmail 没有任何区别。
Symfony 文档只解释了如何处理异常,但在我的例子中没有抛出异常。
虽然在 Symfony 中还有很多关于邮件问题的其他问题,但其中大多数都涉及旧的 Swift Mailer 或其他特定问题。
如何确定邮件是已发送但未收到还是根本未发送?
解决方案
如果它没有抛出异常,您可以假设传输没有引发错误条件。
从文档:
处理发送失败
当您的传输(SMTP 服务器或第三方提供商)接受邮件以进行进一步传递时,Symfony Mailer 认为发送成功。由于您的提供程序中的某些问题,该消息稍后可能会丢失或无法传递,但这对于您的 Symfony 应用程序来说是遥不可及的。
如果在将电子邮件移交给您的传输时出现错误,Symfony 会抛出 Symfony\Component\Mailer\Exception\TransportExceptionInterface。捕获该异常以从错误中恢复或显示一些消息
您还可以检查send()
返回的对象:
方法
Symfony\Component\Mailer\SentMessage
返回的对象提供对原始消息 ( ) 和一些调试信息 ( ) 的访问,例如由 HTTP 传输完成的 HTTP 调用,这对于调试错误很有用。send()
Symfony\Component\Mailer\Transport\TransportInterface
getOriginalMessage()
getDebug()
最后,如果你有Symfony Web Profiler,因为你是在 Web 请求期间进行发送的,你可以检查 profiler 的输出以获取有关邮件发送尝试的信息。
推荐阅读
- database - 可以拆分数据库中的值和参数吗
- android - 如何从多个活动中调用单个服务?
- facebook - 批准 Facebook 上的应用程序需要多长时间?
- angular - 访问 json 中的数组对象以在 Angular 5 中显示下拉值
- visio - 向现有组添加形状会在 MS visio 中引发异常
- colors - lstlisting 代码是蓝色而不是黑色 - 关键字样式接管?
- php - 使用 PHP 从 JSON 数组中获取值
- html - 如何将 HTML 添加到文本中并将其添加到 DOM 以显示它?
- java - 无法将模型对象添加到“/”中的 jsp 视图,但相同的方法正在调用 /index
- android - 如何在firebase数据库中搜索一对