在运行时更新用户的配置

时间:2017-01-16 14:26:13

标签: php laravel laravel-5 laravel-5.1

我正在使用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文件中指定的配置。

另一件需要注意的事情是邮件发送功能在听众中

我无法确定在哪里可以调用该函数,以便在发送邮件之前保留配置更改。

谢谢, ķ

2 个答案:

答案 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);
});   

- >>未发送;消息记录。