Laravel邮件队列:动态更改传输

zd287kbt  于 2022-11-18  发布在  其他
关注(0)|答案(2)|浏览(152)

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

brccelvz

brccelvz1#

不要使用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) {
        //
    });
}
5lwkijsr

5lwkijsr2#

自Laravel 7以来最好的通知方式:https://laravel.com/docs/9.x/notifications#customizing-the-mailer

public function toMail($notifiable)
{
    return (new MailMessage)
                ->mailer('postmark')
                ->line('...');
}

相关问题