php - Laravel 邮件队列 : change transport on fly

标签 php laravel swiftmailer mail-queue

我正在尝试为我的应用程序的每个用户使用不同的 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/

相关文章:

php - swift mailer 发送到队列以便稍后发送

php - PayPal IPN 沙箱无法正常工作但模拟器可以

php - 对齐标签字段 symfony

php - 根据同一页面上的另一个表单刷新 mysql 的下拉输入字段,该表单使用 PHP 将新项目添加到 mysql

php - 类 'Illuminate\Foundation\Application' 未找到 Laravel

swiftmailer - Swiftmailer 的 Silex 特征。 fatal error :调用未定义的方法 Silex\Application::mail()

php - 代码点火器。查询重复结果

laravel - 如何在 Laravel 中使用 TNTSearch 搜索特定列?

laravel - 如何在 Laravel 8 中更改 Jetstream Logo ?

symfony - 异步发送电子邮件 : spool, 队列和 cronjob/daemon