2014-10-08 26 views
5

代碼默認發送電子郵件時工作得很好,但是我想發送電子郵件之前覆蓋SwiftMailer運輸方案(主機,用戶和密碼),選項將是未來數據庫。重寫Swiftmailer交通選擇動態,而不是使用parameters.yml選項下面

任何人都知道如何做到這一點?

注:我去通this post但聽者沒有做任何事情和OP的解決方案具有當我放棄它不出現在我的$傳輸對象$transport->getExtensionHandlers();方法。

作曲進入

"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); 

回答

7

OK,我發現它。 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); 
相關問題