2017-01-16 65 views
2

我使用Laravel 5.1更新配置爲用戶

我創建了一個函數來獲取從數據庫SMTP信息爲用戶$mail_config=STMPDetails::where('user_id',36)->first(),然後我可以叫config輔助函數,並通過數組來設置配置值config($mail_config)。然後我撥打Mail::queue功能。

但在達到[email protected]/laravel/framework/src/Illuminate/Mail/TransportManager.php之後,它再次讀取配置以發送郵件,郵件配置更改爲.env文件中指定的配置。

另一個要注意的是郵件發送功能處於監聽

我無法弄清楚我在哪裏可以調用的函數,使得發送郵件之前配置更改都將保留。

感謝, ķ

回答

3

這應該工作:

// Set your new config 
Config::set('mail.driver', $driver); 
Config::set('mail.from', ['address' => $address, 'name' => $name]); 

// Re execute the MailServiceProvider that should use your new config 
(new Illuminate\Mail\MailServiceProvider(app()))->register(); 
+0

我可以在我調用'Mail :: queue'的同一個偵聽器文件中執行此操作嗎? – karmendra

+0

你知道嗎,你釘了它 – karmendra

+0

我個人創建了一個幫助函數,我每次需要切換我的郵件配置時都會調用它。 –

2

由於默認MailServiceProvider是deferred provider,你應該能夠改變配置細節實際上是創建服務之前。

您能顯示$mail_config的內容嗎?我猜這就是問題所在。它應該像

config(['mail.port' => 587]); 

更新 - 在5.1的應用程序進行測試:

Mail::queue('emails.hello', $data, function ($mail) use ($address) { 
    $mail->to($address); 
}); 

- >>正常發送到收件人。

config(['mail.driver' => 'log']); 

Mail::queue('emails.hello', $data, function ($mail) use ($address) { 
    $mail->to($address); 
}); 

- >>未發送;消息記錄。

+0

如果我讀的配置(「郵件」),將它設置爲正確的值後,而是由時配置值由郵件使用/ TransportManager它復位來自.env – karmendra

+0

@karmendra的值這很奇怪。請查看我更新的答案。無論如何,重新註冊服務提供商肯定會工作(如其他答案所示)。 – alepeino

+0

我在做和你在這裏展示的完全一樣的東西,它不起作用,我無法弄清楚爲什麼。 – karmendra

相關問題