Переопределение параметров транспорта Swiftmailer динамически вместо использования параметров parameters.yml

Приведенный ниже код работает нормально при отправке электронных писем по умолчанию, однако я хочу переопределить параметры транспорта SwiftMailer (хост, пользователь и пароль) перед отправкой электронной почты, и эти параметры будут поступать из базы данных.

Кто-нибудь знает, как этого добиться?

Замечания: Я прошел через эта почта но слушатель ничего не делал, и решение ОП имеет $transport->getExtensionHandlers(); метод, который не появляется в моем объекте $ transport, когда я его выгружаю.

Композитор

"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

контроллер

$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

Решение

Хорошо, я нашел это. доктор

// 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]