2017-04-13 6 views
0

設定したスケジュールに基づいて、さまざまなユーザーに電子メールを送信したいと考えています。Laravel - 今後メールを送る条件に基づいて

私はおよそbeanstalkdqueuesを読み、Delayed Message Queueingと今のところそれがでフィッティングのようになります。

$when = Carbon::now()->addMinutes($minutes); // i can calculate minutes at this moment 
\Mail::to($user)->later($when, new \App\Mail\TestMail); 

しかし、私はいくつかのことにかなりよく分からない:

  1. ユーザーは取り消すことができます将来のスケジュール。その場合、今後どのように送信すると思われるメールを取り消すのですか?実際のメールを送信する前に条件をどこかに設定することはできますか? \App\Mail\TestMailhandle方法にreturn falseを試してみましたが、それが

  2. をエラーを投げ始めた私は右のアプローチを使用しています。私もこれにアプローチする多くの方法がありますについてSchedulerを読みますが(彼らがする必要がある場合)私は、将来の電子メールをキャンセルするつもりですか取得しない

+0

電子メールテーブルのdbフィールドをis_activeとして作成すると、ユーザーの購読を中止したり取得を停止したりすると、is_activeベースの条件を使用できるようになります。 –

答えて

1

。個人的には、メールを後でキューに追加するのではなく、スケジュールに合わせてキューに入れます。

スケジュールされたタスクを1日1回(または時間または分)実行すると、クエリを実行して電子メールを必要とするユーザーを選択し、その結果セットを使用して各結果のキューにジョブを追加します。

このように、ユーザーが退会した場合、すでにキューに入れられているジョブを削除する心配はありません。

Laravelは、予定されたジョブ(https://laravel.com/docs/5.4/scheduling)を作成するための素晴らしいインターフェイスを提供しています。これは、cronジョブで呼び出すことができます。

関連する問題