2

Symfony2 と Swiftmailer に基づいて、毎週のニュースレターを約 17,000 人に送信しようとしています。私の現在の問題は、コンソール用のコマンドを書いたことです。たとえば、「php app/console mail:send --newsletter 0 500」で呼び出すことができます。最後の 2 つの数値は、一度に選択する必要があるオフセットと受信者数の追加変数です。私が通常やりたいことは、このコマンドを 1 回呼び出す cronjob を使用することです。この場合、すべての受信者を取得するために 0 のオフセットと 20.000 の量を指定します。これが機能していないか、少なくともメールの量が多すぎます。私の最初のテストは、これらのメールを自分で送信して、何が起こっているかを確認することでした。スクリプトは、500 以下になるまで終了しませんでした。これは正常ですか?

これが私がすることです:

  1. DB からユーザーを取得する
  2. このニュースレターで送信したい DB の記事を見つける
  3. $message = \Swift_Message::newInstance()... によって新しいメッセージを生成し、$this->mailer->send($message); を呼び出します。
  4. 最後に、次のようにしてキューをフラッシュします。

    $spool = $this->mailer->getTransport()->getSpool();
    $transport = $this->getContainer()->get('swiftmailer.transport.real');
    $spool->flushQueue($transport);
    

私がよくわからないのは、これらすべてのメールを今どのように送信すればよいかということです。一度に 500 通のメールのみが生成されるように、オフセットを変更してこのコマンドを反復する cronjob を使用してシェル スクリプトを呼び出すのは間違っていますか? または、これを行う正しい方法は何ですか? それとも、私のやり方が間違っていて、500 件以上送信できないのでしょうか? たとえば、1000 の場合、スクリプトをキャンセルするまで、コンソールは反応しなくなります。すでにバックグラウンドで起動しようとしましたが、スクリプトがまったく機能していないようでした...エラーなどは発生せず、反応はありませんでした。

編集:または、おそらくSwiftMailerでも使用されているmail()関数でPHPを使用する代わりに、特定のメールボックスを使用してこれらすべてのメールを送信する方がよいでしょうか?

ご助力ありがとうございます!マヌエル

4

1 に答える 1

0

同様のシナリオがあり、sonata 通知バンドル + RabbitMQ を使用することにしました。コンソール コマンドを作成してすべての情報を生成し、RabbitMQ に送信できます。その後、sonata バンドルを使用して、キューを作成して管理し、メールのグループを送信できます。
設定についてサポートが必要な場合は、こちらをご覧ください

于 2013-08-29T13:44:11.810 に答える