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(....);

メッセージはキューに追加されますが、ディスパッチされることはありません。「実際の」送信は非同期であるため、Mail::queue() の前に設定されたトランスポートではなく、デフォルトの SMTP 構成を使用すると思います。

問題は、Mail::queue() を使用するときにメール転送を変更するにはどうすればよいかということです。

4

1 に答える 1

6

を使用する代わりに、電子メールの送信を処理するキュー ジョブ クラスを作成してMail::queueみてください。そうすれば、ジョブが処理されるときにトランスポート切り替えコードが実行されます。

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