我正在尝试为我的应用程序的每个用户使用不同的 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
,尝试 creating a queue job class处理发送电子邮件。这样,传输切换代码将在处理作业时执行。
Job Class Structure Documentation实际上以一个邮件场景为例,它接收一个你可以操作的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) {
//
});
}
关于php - Laravel 邮件队列 : change transport on fly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34809669/