我正在使用 Laravel v5.7 开发多租户(多数据库),并且成功发送队列电子邮件。
在某些特定情况下,我想发送带有“延迟”的按需通知,类似于指南On-Demand Notifications,但会在发送前告知应使用的 SMTP 设置。
我开发了一个更改 config() 值的类。
应用程序/租户/SmtpConfig.php
class SmtpConfig
{
public static function setConnection(SmtpConta $conta = null)
{
// get connection default settings
$config = config()->get("mail");
// populate connection default settings
foreach ($config as $key => $value) {
if ( $key == 'host' ) { $config[$key] = $conta->mail_host ?? $config[$key]; }
if ( $key == 'from' ) { $config[$key] = [
'address' => ( $conta->mail_host === 'smtp.mailtrap.io' ) ? $config[$key]['address'] : $conta->mail_username,
'name' => $conta->conta ?? $config[$key]['name']
]; }
if ( $key == 'username' ) { $config[$key] = $conta->mail_username ?? $config[$key]; }
if ( $key == 'password' ) { $config[$key] = !empty($conta->mail_password) ? $conta->mail_password : $config[$key]; }
}
$config['encryption'] = ( $conta->mail_host === 'smtp.mailtrap.io' ) ? null : 'ssl';
// set connection default settings
config()->set("mail", $config);
}
}
...我在通知中调用这个 SmtpConfig 类:
/**
* Create a new notification instance.
*
* @param $conta
* @param $subject
* @return void
*/
public function __construct(SmtpConta $conta = null, $subject = null)
{
$this->conta = $conta;
$this->subject = $subject;
$when = \Carbon\Carbon::now()->addSecond(100);
$this->delay($when);
app(\App\Tenant\SmtpConfig::class)::setConnection($this->conta);
}
我可以成功发送“延迟”通知,但显然它总是使用.env
文件的默认值。
现在我不确定我在哪里调用这个类是否有意义,甚至我如何告诉通知它应该使用什么 SMTP 配置。