Switching Swiftmailer transport options dynamically instead of using options.yml options

The code below works fine when sending emails by default, however I want to override the SwiftMailer transport settings (host, user and password) before sending emails, and the parameters will come from the database.

Does anyone know how to achieve this?

Note. I went through this post , but the listener did nothing, and the OP solution has the $transport->getExtensionHandlers(); method $transport->getExtensionHandlers(); that doesn't work appears in my transport object $ when I unload it.

Composer recording

 "symfony/swiftmailer-bundle": "2.1.*" 

/booking/app/config/parameters.yml

 parameters: mailer_transport: gmail mailer_host: smtp.gmail.com mailer_user: vizzzzz mailer_password: 123123 

/booking/app/config/config.yml

 swiftmailer: transport: "%mailer_transport%" host: "%mailer_host%" username: "%mailer_user%" password: "%mailer_password%" spool: { type: memory } encryption: tls 

controller

 $hostDb = $dbObject->getHost(); $userDb = $dbObject->getUser(); $passwordDb = $dbObject->getPassword(); // then I should override setting here so that the data coming from parameters.yml is overriden $order = // database object $message = \Swift_Message::newInstance() ->setSubject($order->getSubject()) ->setFrom($order->getFrom()) ->setTo($order->getTo()) ->setBody($content) ; $this->mailer->send($message); 
+5
source share
1 answer

OK, I found it. Doc

 // override transport options so that parameters.yml is by-passed $transport = \Swift_SmtpTransport::newInstance($hostDb,$portDb) ->setUsername($userDb) ->setPassword($passwordDb) ; $this->mailer = \Swift_Mailer::newInstance($transport); // end $order = // database object $message = \Swift_Message::newInstance() ->setSubject($order->getSubject()) ->setFrom($order->getFrom()) ->setTo($order->getTo()) ->setBody($content) ; $this->mailer->send($message); 
+7
source

Source: https://habr.com/ru/post/1204247/


All Articles