php5で書かれたWebアプリケーションがあります。
このアプリケーションではユーザーが登録できますが、パスワードやリンクなどのさまざまな詳細が送信されるのを遅らせたいと思います。この情報を含む電子メールは、ユーザーが抵抗した24時間後に送信されます。
24時間経過後にメールを送信する機能を実行するにはどうすればよいですか?
php5で書かれたWebアプリケーションがあります。
このアプリケーションではユーザーが登録できますが、パスワードやリンクなどのさまざまな詳細が送信されるのを遅らせたいと思います。この情報を含む電子メールは、ユーザーが抵抗した24時間後に送信されます。
24時間経過後にメールを送信する機能を実行するにはどうすればよいですか?
メールキューを処理するデータベーステーブルを設定します。このテーブルには、1つの電子メールに対応する各行がいつキューに入れられたかを指定する列を含めることができます。たとえば、1時間ごとなど、24時間が経過したかどうかを確認するcronジョブを実行できます。
email_type | to | data
--------------------------------------------------------------------------
registration | fred@stuff.com | {first_name: "Fred", last_name: "Stuff" }
このソリューションは柔軟性があります。これは、さまざまな時間だけ遅延させたい他の種類の電子メールがある可能性があるためです。どのタイプの電子メールとコードが各タイプを異なる方法で処理するかを示す列を追加できます。
このcronジョブは1時間ごとに実行されます。
0 * * * * php check_mail_queue.php
電子メールが送信されたかどうかを示す列を追加するか、単に行を削除することができます。また、各電子メールにカスタムデータを含める場合は、配列、ハッシュ、辞書などをシリアル化し、それをテーブルの列にも格納します。
「24」時間がどれだけ正確である必要があるかによって異なりますが、次のようなアプローチが機能するはずです。
ユーザー登録を保持するテーブルを作成するか、registrationTime
列を保持するように既存のテーブルを適合させます。この列 nullable DATETIME
を作成して、ユーザー登録のHH:MMを保持するために使用します。新しい(または変更された)テーブルには、電子メールに関連するデータ、またはユーザーの共通の識別子も含まれている必要があります。これにより、正しいデータを選択できます。
最後に、データベースに毎回クエリを実行し、24時間x mins
以内に登録したユーザーを選択するcronジョブを設定しますy mins
。x
ジョブを実行する頻度はどこでy
、24:00にどれだけ時間が経過したかについてある程度の許容範囲があります。
結果については、メールを作成して送信します。最後に、ユーザーが処理されたことを示すフラグを設定します。適切な方法はregistrationTime
、電子メールを送信したすべてのユーザーに対してnullを設定することです。
ここにあなたを助けるためのいくつかのリンクがあります:
SQLServerの時間 を比較するSQLServerの時間を比較するにはどうすればよいですか?