Я пытаюсь использовать разные настройки SMTP для каждого пользователя моего приложения. Итак, используя Swift_SmtpTransport, установите новый транспортный экземпляр, назначьте его Swift_Mailer, а затем назначьте его Laravel Mailer.
Ниже полный фрагмент:
$transport = Swift_SmtpTransport::newInstance($mailConfig['smtp_host'], $mailConfig['smtp_port'], 'ssl');
$transport->setUsername($mailConfig['smtp_user']);
$transport->setPassword($mailConfig['smtp_pass']);
$smtp = new Swift_Mailer($transport);
Mail::setSwiftMailer($smtp);
Mail::queue(....);
Сообщения добавляются в очередь, но никогда не отправляются. Я предполагаю, что, поскольку «реальная» отправка является асинхронной, она использует конфигурацию SMTP по умолчанию, а не транспортный набор перед Mail :: queue ().
Итак, вопрос: как изменить почтовый транспорт при использовании Mail :: queue ()?
Вместо того, чтобы использовать Mail::queue
, пытаться создание класса задания очереди это обрабатывает отправку электронной почты. Таким образом, код переключения транспорта будет выполняться при обработке задания.
Документация по структуре классов работ фактически использует сценарий рассылки в качестве примера, который получает Mailer
экземпляр, которым вы можете манипулировать. Просто используйте свой код в классе handle
метод:
public function handle(Mailer $mailer)
{
$transport = Swift_SmtpTransport::newInstance($mailConfig['smtp_host'], $mailConfig['smtp_port'], 'ssl');
$transport->setUsername($mailConfig['smtp_user']);
$transport->setPassword($mailConfig['smtp_pass']);
$smtp = new Swift_Mailer($transport);
$mailer->setSwiftMailer($smtp);
$mailer->send('viewname', ['data'], function ($m) {
//
});
}
Других решений пока нет …