Когда я отправлял электронные письма с помощью symfony 3.4 и swiftmailer, я могу установить параметр, чтобы вместо этого отправлять все электронные письма на определенный адрес электронной почты (имеет смысл в среде разработки):
swiftmailer:
delivery_address: "[email protected]"
Теперь в самом письме я не вижу, куда бы оно отправилось, если бы этот параметр не был установлен. Я мог бы посмотреть в заголовке на переменную X-Swift-To, но это очень утомительно ...
Я бы хотел получить простую информацию в качестве первой строки в теле письма, что-то вроде
This email would be sent to [email protected] in production
Как я могу этого добиться? Есть ли какая-то конфигурация swiftmailer для этого? Потому что, когда я настроил swiftmailer и отправил электронное письмо, у меня нет возможности узнать, куда на самом деле будет отправлено электронное письмо ...




Я создал сервис, который за меня обрабатывает такие вещи:
<?php
namespace AppBundle\Util;
use Doctrine\ORM\EntityManager;
use Symfony\Component\Templating\EngineInterface;
use Swift_Mailer;
use AppBundle\Entity\User;
class MailService
{
private $em;
private $templating;
private $mailer;
private $env;
public function __construct(EntityManager $entityManager, EngineInterface $templating, Swift_Mailer $mailer,$env)
{
$this->em = $entityManager;
$this->templating = $templating;
$this->mailer = $mailer;
$this->env = $env;
}
private function doSend($subject, $to, $template, $vars = array())
{
$message = \Swift_Message::newInstance();
$body = $this->templating->render($template, $vars);
$message->setSubject($subject)
->setFrom("[email protected]")
->setTo($to)
->setBody(
$body,
"text/html"
);
if ($this->env != "prod") // Redirect mails in dev/staging environments
{
$message->setSubject("[".$this->env." ".$to."] ".$subject);
$message->setTo("[email protected]"); // hardcoded for my case, could be changed to config parameter though...
}
$this->mailer->send($message);
}
public function Send($subject, $to, $template, $vars = array())
{
$type = gettype($to);
switch($type)
{
case "string":
$this->doSend($subject, $to, $template, $vars);
break;
case "array":
foreach($to as $t)
{
$this->Send($subject, $to, $template, $vars);
}
break;
case "object":
if ($to instanceof User)
{
$this->Send($subject, $to->getEmail(), $template, $vars);
} elseif (is_iterable($to))
{
foreach($to as $t)
{
$this->Send($subject, $t, $template, $vars);
}
}
break;
default:
throw \Exception("Unknown Recipient Type.");
}
}
}
Затем я могу использовать $this->get("my.mailer")->Send($subject, $recipient, $template, $templateVars); (я использую шаблоны веточек для своих писем)
Письма в среде, отличной от prod, перенаправляются, а их строка темы изменяется, чтобы содержать исходного получателя и текущую среду.
Обратите внимание, что я добавил несколько дополнительных проверок, чтобы позволить $recipient быть сущностью User или массивом писем / сущностей.