From 28e3b1e20162b29a44477fe9272df215a5a1742b Mon Sep 17 00:00:00 2001 From: andolini Date: Tue, 28 May 2019 15:03:49 +0200 Subject: [PATCH] add bcc to emails * add bcc_email configuration * add bcc if set * add bdd if set * add bcc to mails * add bcc to configuration * set bcc in parameters * add bcc in test * add bcc in test * phpcs fix * phpcs fix * php cs fix * php cs fix --- DependencyInjection/Configuration.php | 1 + DependencyInjection/FOSUserExtension.php | 11 +++++++---- Mailer/Mailer.php | 5 +++++ Mailer/TwigSwiftMailer.php | 6 ++++++ Resources/config/mailer.xml | 2 ++ Resources/doc/configuration_reference.rst | 1 + Tests/Mailer/MailerTest.php | 1 + Tests/Mailer/TwigSwiftMailerTest.php | 1 + 8 files changed, 24 insertions(+), 4 deletions(-) diff --git a/DependencyInjection/Configuration.php b/DependencyInjection/Configuration.php index d637c42c53..f588e29a2b 100644 --- a/DependencyInjection/Configuration.php +++ b/DependencyInjection/Configuration.php @@ -55,6 +55,7 @@ public function getConfigTreeBuilder() ->scalarNode('user_class')->isRequired()->cannotBeEmpty()->end() ->scalarNode('firewall_name')->isRequired()->cannotBeEmpty()->end() ->scalarNode('model_manager_name')->defaultNull()->end() + ->scalarNode('bcc_email')->defaultNull()->end() ->booleanNode('use_authentication_listener')->defaultTrue()->end() ->booleanNode('use_listener')->defaultTrue()->end() ->booleanNode('use_flash_notifications')->defaultTrue()->end() diff --git a/DependencyInjection/FOSUserExtension.php b/DependencyInjection/FOSUserExtension.php index c5960ecefe..a54100aa27 100644 --- a/DependencyInjection/FOSUserExtension.php +++ b/DependencyInjection/FOSUserExtension.php @@ -114,7 +114,7 @@ public function load(array $configs, ContainerBuilder $container) } if (!empty($config['registration'])) { - $this->loadRegistration($config['registration'], $container, $loader, $config['from_email']); + $this->loadRegistration($config['registration'], $container, $loader, $config['from_email'], $config['bcc_email']); } if (!empty($config['change_password'])) { @@ -122,7 +122,7 @@ public function load(array $configs, ContainerBuilder $container) } if (!empty($config['resetting'])) { - $this->loadResetting($config['resetting'], $container, $loader, $config['from_email']); + $this->loadResetting($config['resetting'], $container, $loader, $config['from_email'], $config['bcc_email']); } if (!empty($config['group'])) { @@ -206,8 +206,9 @@ private function loadProfile(array $config, ContainerBuilder $container, XmlFile * @param ContainerBuilder $container * @param XmlFileLoader $loader * @param array $fromEmail + * @param string $bccEmail */ - private function loadRegistration(array $config, ContainerBuilder $container, XmlFileLoader $loader, array $fromEmail) + private function loadRegistration(array $config, ContainerBuilder $container, XmlFileLoader $loader, array $fromEmail, $bccEmail) { $loader->load('registration.xml'); $this->sessionNeeded = true; @@ -223,6 +224,7 @@ private function loadRegistration(array $config, ContainerBuilder $container, Xm unset($config['confirmation']['from_email']); } $container->setParameter('fos_user.registration.confirmation.from_email', array($fromEmail['address'] => $fromEmail['sender_name'])); + $container->setParameter('fos_user.bcc_email', $bccEmail); $this->remapParametersNamespaces($config, $container, array( 'confirmation' => 'fos_user.registration.confirmation.%s', @@ -250,7 +252,7 @@ private function loadChangePassword(array $config, ContainerBuilder $container, * @param XmlFileLoader $loader * @param array $fromEmail */ - private function loadResetting(array $config, ContainerBuilder $container, XmlFileLoader $loader, array $fromEmail) + private function loadResetting(array $config, ContainerBuilder $container, XmlFileLoader $loader, array $fromEmail, $bccEmail) { $this->mailerNeeded = true; $loader->load('resetting.xml'); @@ -261,6 +263,7 @@ private function loadResetting(array $config, ContainerBuilder $container, XmlFi unset($config['email']['from_email']); } $container->setParameter('fos_user.resetting.email.from_email', array($fromEmail['address'] => $fromEmail['sender_name'])); + $container->setParameter('fos_user.bcc_email', $bccEmail); $this->remapParametersNamespaces($config, $container, array( '' => array( diff --git a/Mailer/Mailer.php b/Mailer/Mailer.php index 8f9e537a70..6e8839e4a7 100644 --- a/Mailer/Mailer.php +++ b/Mailer/Mailer.php @@ -95,6 +95,7 @@ protected function sendEmailMessage($renderedTemplate, $fromEmail, $toEmail) $renderedLines = explode("\n", trim($renderedTemplate)); $subject = array_shift($renderedLines); $body = implode("\n", $renderedLines); + $bccEmail = $this->parameters['bcc_email']; $message = (new \Swift_Message()) ->setSubject($subject) @@ -102,6 +103,10 @@ protected function sendEmailMessage($renderedTemplate, $fromEmail, $toEmail) ->setTo($toEmail) ->setBody($body); + if (!empty($bccEmail)) { + $message->setBcc($bccEmail); + } + $this->mailer->send($message); } } diff --git a/Mailer/TwigSwiftMailer.php b/Mailer/TwigSwiftMailer.php index cad3696828..b7124b915d 100644 --- a/Mailer/TwigSwiftMailer.php +++ b/Mailer/TwigSwiftMailer.php @@ -99,6 +99,8 @@ protected function sendMessage($templateName, $context, $fromEmail, $toEmail) $subject = $template->renderBlock('subject', $context); $textBody = $template->renderBlock('body_text', $context); + $bccEmail = $this->parameters['bcc_email']; + $htmlBody = ''; if ($template->hasBlock('body_html', $context)) { @@ -110,6 +112,10 @@ protected function sendMessage($templateName, $context, $fromEmail, $toEmail) ->setFrom($fromEmail) ->setTo($toEmail); + if (!empty($bccEmail)) { + $message->setBcc($bccEmail); + } + if (!empty($htmlBody)) { $message->setBody($htmlBody, 'text/html') ->addPart($textBody, 'text/plain'); diff --git a/Resources/config/mailer.xml b/Resources/config/mailer.xml index b3253ae119..e9c8062273 100644 --- a/Resources/config/mailer.xml +++ b/Resources/config/mailer.xml @@ -27,6 +27,7 @@ %fos_user.registration.confirmation.from_email% %fos_user.resetting.email.from_email% + %fos_user.bcc_email% @@ -44,6 +45,7 @@ %fos_user.registration.confirmation.from_email% %fos_user.resetting.email.from_email% + %fos_user.bcc_email% diff --git a/Resources/doc/configuration_reference.rst b/Resources/doc/configuration_reference.rst index e26f104bcf..a52059a214 100644 --- a/Resources/doc/configuration_reference.rst +++ b/Resources/doc/configuration_reference.rst @@ -14,6 +14,7 @@ All available configuration options are listed below with their default values. use_authentication_listener: true use_username_form_type: true model_manager_name: null # change it to the name of your entity/document manager if you don't want to use the default one. + bcc_email: null # change it to valid email to add bcc to all emails from_email: address: webmaster@example.com sender_name: webmaster diff --git a/Tests/Mailer/MailerTest.php b/Tests/Mailer/MailerTest.php index bb4e4b2d49..72323ce0ab 100644 --- a/Tests/Mailer/MailerTest.php +++ b/Tests/Mailer/MailerTest.php @@ -95,6 +95,7 @@ private function getMailer() 'confirmation' => 'foo@example.com', 'resetting' => 'foo@example.com', ), + 'bcc_email' => null, ) ); } diff --git a/Tests/Mailer/TwigSwiftMailerTest.php b/Tests/Mailer/TwigSwiftMailerTest.php index f56e02292b..2f856fa815 100644 --- a/Tests/Mailer/TwigSwiftMailerTest.php +++ b/Tests/Mailer/TwigSwiftMailerTest.php @@ -97,6 +97,7 @@ private function getTwigSwiftMailer() 'confirmation' => 'foo@example.com', 'resetting' => 'foo@example.com', ), + 'bcc_email' => null, ) ); }