Как отправлять Email сообщений, используя разную конфигурацию

Всем привет. Давно я не писал в блог, надо исправляться. Тем более есть о чем. Много проектов, есть много наработок.
В одном из проектов мне необходимо было отправлять email сообщения с разных SMTP. Вроде не сложно, но проблема оказалось в том, что мы можем задать одну конфигурацию для драйвера отправки почты. Как быть?
И так, я не буду рассказывать, как установить и настроить Laravel. Об этом вы можете прочитать на просторах интернет. Или на моем блоге «Создание CMS на Laravel: создание виртуального хоста, установка и настройка проекта».
Как отправлять email сообщения очень хорошо описаны в «документации по Laravel» или у меня в статье «Отправка email в Laravel, используя SMTP».
Возьмем пример метода отправки сообщения из этой статьи:
public function send() {
$comment = 'Это сообщение отправлено из формы обратной связи';
$toEmail = "test@mail.test";
Mail::to($toEmail)->send(new FeedbackMail($comment));
return 'Сообщение отправлено на адрес '. $toEmail;
}
Для отправки сообщения используется метод send фасада Mail. А вот откуда будет отправляться, берется из конфигурации:
config/mail.php
Отлично! Значит перед отправкой мы можем переопределить конфиг.
Объявляем в нашем контроллере:
use Illuminate\Support\Facades\Config;
И изменяем метод отправки сообщения send()
public function send() {
Config::set('mail.driver', '<новый драйвер>');
Config::set('mail.host', '<адрес хоста>');
Config::set('mail.port', '<порт>');
Config::set('mail.from.address', '<адрес от имени, которого отправляем сообщение>');
Config::set('mail.from.name', '<имя от, которого отправляем сообщение>');
Config::set('mail.encryption', '<протокол шифрования>');
Config::set('mail.username', '<имя пользователя>');
Config::set('mail.password', '<пароль>');
$comment = 'Это сообщение отправлено из формы обратной связи';
$toEmail = "test@mail.test";
Mail::to($toEmail)->send(new FeedbackMail($comment));
return 'Сообщение отправлено на адрес '. $toEmail;
}
Все. Теперь сообщение будет отправлено с использованием другого драйвера. Да, мы можем и эти настройки вынести в конфиг, а потом еще и спрятать в .env. Но это оставляю на ваше усмотрение.