动态覆盖Swiftmailer传输选项,而不是使用parameters.yml选项

Ben*_*der 5 php swiftmailer symfony

默认情况下,在发送电子邮件时,下面的代码工作正常但是我想在发送电子邮件之前覆盖SwiftMailer传输选项(主机,用户和密码),选项将来自数据库.

谁知道如何实现这一目标?

注意:我通过这篇文章,但是听众没有做任何事情,OP的解决方案有一个$transport->getExtensionHandlers();方法,当我转储它时,它没有出现在我的$ transport对象中.

作曲家入门

"symfony/swiftmailer-bundle": "2.1.*"
Run Code Online (Sandbox Code Playgroud)

/booking/app/config/parameters.yml

parameters:
    mailer_transport:  gmail
    mailer_host:       smtp.gmail.com
    mailer_user:       vizzzzz
    mailer_password:   123123
Run Code Online (Sandbox Code Playgroud)

/booking/app/config/config.yml

swiftmailer:
    transport: "%mailer_transport%"
    host:      "%mailer_host%"
    username:  "%mailer_user%"
    password:  "%mailer_password%"
    spool:     { type: memory }
    encryption: tls
Run Code Online (Sandbox Code Playgroud)

调节器

$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);
Run Code Online (Sandbox Code Playgroud)

Ben*_*der 7

好的,我找到了.文件

// 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);
Run Code Online (Sandbox Code Playgroud)