我正在使用Laravel 5.1
我创建了一个函数来从db获取用户$mail_config=STMPDetails::where('user_id',36)->first()
的smtp信息,然后我可以调用config
辅助函数并传递数组来设置配置值config($mail_config)
。然后我调用Mail::queue
函数。
但在它再次读取配置以发送邮件的createSmtpDriver@vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php
之前,邮件配置将更改为.env文件中指定的配置。
另一件需要注意的事情是邮件发送功能在听众中
我无法确定在哪里可以调用该函数,以便在发送邮件之前保留配置更改。
谢谢, ķ
答案 0 :(得分:4)
这应该有效:
// 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();
答案 1 :(得分: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);
});
- >>未发送;消息记录。