Я разрабатываю Multi Tenant (несколько баз данных) с Laravel v5.7, и мне удается отправлять электронные письма очереди.
В некоторых конкретных ситуациях я хотел бы отправлять уведомления по запросу с «задержкой», как в руководстве Уведомления по запросу, но сообщающие о настройках 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 он должен использовать.