在运行时为用户更新配置
Updating config on runtime for a user
我正在使用 Laravel 5.1
我创建了一个函数来从数据库中为用户 $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 文件中指定的配置。
另外需要注意的是Mail发送功能在一个Listener中
我不知道在哪里可以调用该函数,以便在发送邮件之前保留配置更改。
谢谢,
K
由于默认的 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);
});
->>未发送;已记录消息。
这应该有效:
// 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();
我正在使用 Laravel 5.1
我创建了一个函数来从数据库中为用户 $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 文件中指定的配置。
另外需要注意的是Mail发送功能在一个Listener中
我不知道在哪里可以调用该函数,以便在发送邮件之前保留配置更改。
谢谢, K
由于默认的 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);
});
->>未发送;已记录消息。
这应该有效:
// 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();