установить почтовый драйвер динамически из базы данных для разных адресов электронной почты в уведомлении

Я хочу динамически установить следующий параметр, прежде чем уведомлять пользователя.

MAIL_DRIVER=
MAIL_HOST=
MAIL_PORT=
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_SENDER_EMAIL=
MAIL_SENDER_NAME=

для каждого клиента у них есть возможность установить это значение из внешнего интерфейса, теперь мне нужно отправить электронное письмо в соответствии с настройками. Есть ли способ в laravel сделать это.

Я использую уведомление для уведомления каждого клиента, поэтому, прежде чем уведомлять, я хочу установить этот параметр динамически из БД.

Заранее спасибо.


person joy    schedule 19.10.2019    source источник


Ответы (1)


эти переменные env затем используются в файле конфигурации, вы можете найти правильные имена конфигураций, проверив mail.php в папке config

Вы можете изменить значения конфигурации во время выполнения с помощью массива для помощника конфигурации.

См.: https://laravel.com/docs/6.x/configuration#accessing-configuration-values

Вам нужно найти соответствующие переменные и установить их значение, как для Laravel - 6

config([
    'mail.driver' => 'smtp',
    'mail.host' => 'smtp.mailgun.org',
    'mail.port' => 587,
    'mail.encryption' => 'tls',
    'mail.username' => 'if-any',
    'mail.password' => 'if-any',
]);

После этого ваши новые настройки должны использоваться.

person Zohaib    schedule 19.10.2019
comment
если я изменю значение конфигурации, это также повлияет на другое электронное письмо, которое отправляется из системы, поэтому это не лучший вариант для его изменения. - person joy; 19.10.2019
comment
в какой-то момент есть шанс, что из системы отправится другая электронная почта - person joy; 19.10.2019
comment
Как это может быть использовано любым другим запросом, поскольку вы измените его на лету, и вы можете повторно изменить значение по умолчанию после отправки электронного письма, если это может быть любое другое электронное письмо в том же запросе. - person Zohaib; 19.10.2019
comment
Или вы можете увидеть этот метод API: laravel.com/api/ 6.x/Illuminate/Почта/ - person Zohaib; 19.10.2019
comment
в уведомлении laravel, в каком файле я могу изменить эту конфигурацию... внутри почтового файла или файла уведомлений? - person joy; 19.10.2019
comment
config — это глобальная вспомогательная функция, вы можете вызывать ее во всем приложении, вы можете выбрать свою логику. - person Zohaib; 19.10.2019
comment
я имею в виду, что я использую уведомление, которое находится в очереди, так что, как вы думаете, какой файл и функцию я должен написать логику ')) - person joy; 19.10.2019
comment
Оба будут выполняться в задании очереди, но я думаю, что это должно быть в файле уведомлений, и вы можете использовать свой почтовый ящик в других уведомлениях. Не забудьте отменить пользовательские настройки после отправки электронного письма, поскольку длительные потоки могут сохранять пользовательские настройки в этом работнике очереди. - person Zohaib; 19.10.2019
comment
да, в файле уведомлений, где я могу поместить логику отмены? - person joy; 19.10.2019
comment
я запутался, потому что метод отправки будет вызываться в конце, поэтому я думаю, что не могу писать ни в один из этих двух файлов - person joy; 19.10.2019
comment
Ты прав. Я не уверен, так как я отправлял электронную почту в пользовательском задании, где я вручную отправлял электронное письмо с Mail::send([],[],function(){}) в методе обработки задания. В этом случае я смогу просто обновить конфигурацию перед методом Mail::send и снова обновить по умолчанию после отправки в этом методе обработки задания. С уведомлением Laravel и Mailable да, это меня тоже сбивает с толку. - person Zohaib; 19.10.2019
comment
Давайте продолжим обсуждение в чате. - person Zohaib; 20.10.2019