Laravel 邮件队列:即时更改传输
Laravel Mail Queue: change transport on fly
我正在尝试为我的应用程序的每个用户使用不同的 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(....);
消息已添加到队列但从未发送。我想因为 "real" 发送是异步的,所以它使用默认的 SMTP 配置,而不是 Mail::queue().
之前设置的传输
所以,问题是:使用 Mail::queue() 时如何更改邮件传输?
请尝试使用 creating a queue job class 来处理发送电子邮件,而不是使用 Mail::queue
。这样,传输切换代码将在处理作业时执行。
Job Class Structure Documentation其实以一个邮寄场景为例,它接收一个Mailer
实例,你可以操作。只需在 class 的 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) {
//
});
}
我正在尝试为我的应用程序的每个用户使用不同的 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(....);
消息已添加到队列但从未发送。我想因为 "real" 发送是异步的,所以它使用默认的 SMTP 配置,而不是 Mail::queue().
之前设置的传输所以,问题是:使用 Mail::queue() 时如何更改邮件传输?
请尝试使用 creating a queue job class 来处理发送电子邮件,而不是使用 Mail::queue
。这样,传输切换代码将在处理作业时执行。
Job Class Structure Documentation其实以一个邮寄场景为例,它接收一个Mailer
实例,你可以操作。只需在 class 的 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) {
//
});
}