我正在处理一个项目,在每个管理员登录时需要更新SMTP详细信息。我将这些详细信息存储在数据库中,有什么最好的方法来处理呢。
我的方法:从config/app.php
提供程序列表中移除Illuminate\Mail\MailServiceProvider::class
,并创建一个新的中间件,在用户被识别之后手动加载它。
<?php
namespace App\Http\Middleware;
use Illuminate\Contracts\Auth\Guard;
use Illuminate\Mail\TransportManager;
use Closure;
use Mail;
use Config;
use App;
class OverwriteMail
{
public function __construct(Guard $auth)
{
$this->auth = $auth;
}
public function handle($request, Closure $next)
{
/*
$conf is an array containing the mail configuration,
a described in config/mail.php. Something like:
[
'driver' => 'smtp',
'host' => 'smtp.mydomain.com',
'username' => foo',
'password' => 'bar'
...
]
*/
$conf = my_own_function();
Config::set('mail', $conf);
$app = App::getInstance();
$app->register('Illuminate\Mail\MailServiceProvider');
return $next($request);
}
}
本文介绍了如何在Laravel项目中使用动态邮件配置。动态配置能够允许你根据需要在不同情况下更改SMTP帐户,例如,在生产和开发环境之间切换。此外,这篇文章还介绍了如何使用.env文件来存储配置信息,并从邮件控制器中访问它们。
Config
门面动态设置详细信息即可。