<?php declare(strict_types=1);
// src/EventSubscriber/MailerSubscriber.php
namespace App\EventSubscriber;
use Psr\Log\LoggerInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpKernel\KernelInterface;
use Symfony\Component\Mailer\Event\MessageEvent;
use Symfony\Component\Mime\Address;
use Symfony\Component\Mime\Email;
/**
* @see https://symfony.com/doc/current/mailer.html#development-debugging
*/
class MailerSubscriber implements EventSubscriberInterface
{
private $kernel;
private $logger;
public function __construct(KernelInterface $kernel, LoggerInterface $logger)
{
$this->kernel = $kernel;
$this->logger = $logger;
}
public static function getSubscribedEvents()
{
return [MessageEvent::class => 'onMessage'];
}
public function onMessage(MessageEvent $event)
{
$message = $event->getMessage();
$envelope = $event->getEnvelope();
// make sure it's an Email object
if (!$message instanceof Email) {
return;
}
// always set the from address on the Message
$this->logger->info("Forcing sender to <admin@mapyourdream.com>");
$message->from(new Address('admin@mapyourdream.com'));
// set Envelope recipients if not in production environment
if ($this->kernel->getEnvironment() != 'prod' || $this->kernel->isDebug()) {
$this->logger->info("Forcing recipient to <stephane@mapyourdream.com>");
$envelope->setRecipients([new Address('stephane@mapyourdream.com')]);
} else {
$message->addBcc(new Address('stephane@mapyourdream.com'));
}
}
}