src/EventSubscriber/EmailSubscriber.php line 25
<?phpnamespace App\EventSubscriber;use App\Entity\App\Email;use App\Repository\App\EmailRepository;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Symfony\Component\Mailer\Event\FailedMessageEvent;use Symfony\Component\Mailer\Event\SentMessageEvent;class EmailSubscriber implements EventSubscriberInterface{public function __construct(private EmailRepository $emailRepository,){}public static function getSubscribedEvents(): array{return [SentMessageEvent::class => 'onEmailSent',FailedMessageEvent::class => 'onEmailFailed',];}public function onEmailSent(SentMessageEvent $event): void{$message = $event->getMessage();preg_match('/Subject: (.*)From:/sm', $message->getOriginalMessage()->toString(), $matches);$subject = str_replace('=C3=A9?=', 'é', $matches[1]);$email = (new Email())->setDate(new \DateTime())->setRecipients(implode(', ', array_map(fn($recipient) => $recipient->getAddress(), $message->getEnvelope()->getRecipients())))->setSubject($subject)->setStatus('sent');$this->emailRepository->save($email, true);}public function onEmailFailed(FailedMessageEvent $event): void{$message = $event->getMessage();$error = $event->getError();preg_match('/Subject: (.*)From:/sm', $message->toString(), $matches);$subject = str_replace('=C3=A9?=', 'é', $matches[1]);$recipients = preg_match('/To: (.*)Subject:/sm', $message->toString(), $matches);$email = (new Email())->setDate(new \DateTime())->setRecipients($recipients)->setSubject($subject)->setError($error->getMessage())->setStatus('failed');$this->emailRepository->save($email, true);}}