我尝试为我的应用程序的每个用户使用不同的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(....);
消息被添加到队列但从未调度过。我想这是因为"真正的" send is asyncronous它使用默认的SMTP配置,而不是Mail :: queue()之前的传输集。
所以,问题是:在使用Mail :: queue()时如何更改邮件传输?
答案 0 :(得分:4)
不要使用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) {
//
});
}