下面的代码在默认情况下发送电子邮件时工作正常但是我想在发送电子邮件之前覆盖SwiftMailer传输选项(主机,用户和密码),选项将来自数据库。
任何人都知道如何实现这一目标?
注意:我通过了this post,但是听众没有做任何事情,OP的解决方案有$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);
答案 0 :(得分:7)
好的,我找到了。 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);