3

我正在尝试为我的应用程序的每个用户使用不同的 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() 时如何改变邮件传输?

4

1 回答 1

6

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) {
        //
    });
}
于 2016-01-15T12:45:52.200 回答