1111
1212namespace Symfony \Component \Mailer \EventListener ;
1313
14+ use Symfony \Bridge \Twig \Mime \TemplatedEmail ;
1415use Symfony \Component \EventDispatcher \EventSubscriberInterface ;
1516use Symfony \Component \Mailer \Event \MessageEvent ;
1617use Symfony \Component \Mailer \Exception \InvalidArgumentException ;
1920use Symfony \Component \Mime \Header \Headers ;
2021use Symfony \Component \Mime \Header \MailboxListHeader ;
2122use Symfony \Component \Mime \Message ;
23+ use Symfony \Contracts \Translation \TranslatorInterface ;
2224
2325/**
24- * Manipulates the headers and the body of a Message.
26+ * Manipulates the headers, subject and the body of a Message.
2527 *
2628 * @author Fabien Potencier <fabien@symfony.com>
2729 */
@@ -45,6 +47,7 @@ public function __construct(
4547 private ?Headers $ headers = null ,
4648 private ?BodyRendererInterface $ renderer = null ,
4749 array $ headerRules = self ::DEFAULT_RULES ,
50+ private ?TranslatorInterface $ translator = null ,
4851 ) {
4952 foreach ($ headerRules as $ headerName => $ rule ) {
5053 $ this ->addHeaderRule ($ headerName , $ rule );
@@ -68,6 +71,7 @@ public function onMessage(MessageEvent $event): void
6871 }
6972
7073 $ this ->setHeaders ($ message );
74+ $ this ->translateSubject ($ message );
7175 $ this ->renderMessage ($ message );
7276 }
7377
@@ -115,6 +119,15 @@ private function setHeaders(Message $message): void
115119 }
116120 }
117121
122+ private function translateSubject (Message $ message ): void
123+ {
124+ if (!$ message instanceof TemplatedEmail || !$ this ->translator || !$ message ->getTranslatableSubject ()) {
125+ return ;
126+ }
127+
128+ $ message ->subject ($ message ->getTranslatableSubject ()->trans ($ this ->translator , $ message ->getLocale ()));
129+ }
130+
118131 private function renderMessage (Message $ message ): void
119132 {
120133 if (!$ this ->renderer ) {
0 commit comments