Symfony - 获取使用 Messenger 发送的邮件的状态

Symfony - Get the state of the mail sended with Messenger

提问人:AureSanta 提问时间:9/22/2023 更新时间:9/23/2023 访问量:74

问:

我目前正在我的项目中使用Symfony Messenger。我正在使用它通过 MessageHandler 发送邮件

文件如下:

<?php

namespace App\MessageHandler;

use App\Entity\Dossier;
use App\Message\SendEmailMessage;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Component\Mailer\MailerInterface;
use Symfony\Component\Mime\Email;
use Symfony\Component\Messenger\Handler\MessageHandlerInterface;

class SendEmailMessageHandler implements MessageHandlerInterface
{
    /** @var EntityManagerInterface */
    private $em;
    /** @var MailerInterface */
    private $mailer;

    public function __construct(EntityManagerInterface $entityManager, MailerInterface $mailer)
    {
        $this->entityManager = $entityManager;
        $this->mailer = $mailer;
    }

    public function __invoke(SendEmailMessage $message)
    {
        $email = (new Email())
        ->from('[email protected]')
        ->to('[email protected]')
        ->subject('test')
        ->html('test');

        $this->mailer->send($email);
    }

}

这是一种通过Messenger跟踪邮件以从smtp服务器获得响应的方法吗?我想向用户显示邮件是否是使用 Messenger 发送的

邮件 symfony-mailer

评论


答:

1赞 Jason Olson 9/23/2023 #1

您可以跟踪邮件在通过 try/catch 块传递到 SMTP 服务器时是否失败,如 https://symfony.com/doc/current/mailer.html#handling-sending-failures 所示


$email = new Email();
// ...
try {
    $mailer->send($email);
} catch (TransportExceptionInterface $e) {
    // some error prevented the email sending; display an
    // error message or try to resend the message
}

但是,如果您正在寻找进一步的反馈,例如邮件最终无法送达(退回邮件、邮箱已满等),那么您需要查看邮件服务器的管理端,或者更多地查看第三方传输,然后会发出回调 webhook,稍后会通知您状态。这些服务还提供很好的反馈,例如您的邮件是否被收件人标记为垃圾邮件等。

评论

0赞 AureSanta 9/26/2023
谢谢,但是我怎样才能故意发送失败的消息以查看失败的消息是否正确存储在我的数据库中?
0赞 Jason Olson 9/27/2023
@AureSanta - Symfony Mailer 组件仅在文件中定义的邮件服务器(由 指定)拒绝邮件时才会抛出错误。例如,对于SMTP服务器,如果它接受您的邮件进行转发,Symfony不会触发错误,即使邮件后来被退回或电子邮件地址无效。从本质上讲,如果你配置的收件人接受了消息,Symfony不会产生错误。但是,如果确实发生此类错误,及时发出警报至关重要,因为这可能意味着无法发送电子邮件。.envMAILER_DSNMAILER_DSN
0赞 Jason Olson 9/27/2023
如果您想跟踪或记录消息的最终可传递性,那就是第三方传输之类的东西,然后将 Web 挂钩提供回您的应用程序。当邮件被发送、接收、阅读,或者是否被退回、报告为垃圾邮件等时,他们会通知您。
0赞 AureSanta 9/27/2023
谢谢 Jason,我会检查第三方传输文档!