Я использую symfony 3.2.7 и хочу сохранить информацию о каждом письме, отправленном через приложение (используя Swift Mailer), в моей базе данных.Я пытаюсь использовать EventSubscriber для этого, поскольку Swift Mailer отправляет константу RESULT_SUCCESS
из класса Swift_Events_SendEvent
, когда электронное письмо успешно отправлено.Но это просто не работает.
Файл, содержащий EventSubscriber, определенно обрабатывается при отправке почты (чтобы проверить это, я намеренно добавил неверный синтаксис в файл и получаю синтаксическую ошибку, когда почтаотправлено), но функция onMailSent
явно не вызывается, так как информация электронной почты не хранится в моей базе данных.И эта же функция работает в другом контексте, поэтому проблема не в самой функции.
Что я делаю не так?Вот мой код:
SentMailsListener.php:
<?php
namespace Fidelise\SignUpBundle\EventListener;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Fidelise\SignUpBundle\Entity\EmailsHistory;
use Swift_Events_SendEvent;
class SentMailsListener implements EventSubscriberInterface
{
public static function getSubscribedEvents()
{
return [Swift_Events_SendEvent::RESULT_SUCCESS => 'onMailSent'];
}
public function onMailSent(Swift_Events_SendEvent $event)
{
$em = $this->getDoctrine()->getManager();
$message = $event->getMessage();
$email = new EmailsHistory();
$email->setRecipient(key($message->getTo()));
$email->setSubject($message->getSubject());
$email->setBody($message->getBody());
$email->setSender(key($message->getFrom()));
$em->persist($email);
$em->flush();
}
}
services.yml:
services:
mail_sent_subscriber:
class: Fidelise\SignUpBundle\EventListener\SentMailsListener
tags:
- { name: kernel.event_subscriber }