2017-02-08 8 views
0

私は、何か買ってから数日後に顧客にフォローアップメールを送ろうと思うウェブサイトを持っています。私は今、それをどうやって行うのだろうかと思います私は2つのオプションがあると思う:アクションをデータベースに保存するか、コードから決定しますか?

  1. 送信する予定のメールを格納するテーブルを私のDBに作成する。だから私は顧客の電子メールアドレスとそれを送信したい日付を保存するだけです。私は毎日cronを実行し、送信する必要がある電子メールを送信し、テーブルのステータスを「送信済み」に設定します。この方法の利点は、どの電子メールを送信する必要があるかを知っていることです。欠点は、柔軟性が低いことです。 DBに格納されているので、メールを送信した後の日数を変更することは容易ではありません。
  2. 私はxron数日前に何かを購入した顧客のリストを取得し、電子メールを送信するcronを実行するだけでコードから実行できます。次には、データベース内の電子メール。この方法の利点は、私はより柔軟性があるということです。後で電子メールを送信したい場合は、そのコード(またはいくつかのvar)で定義することができます。欠点は、私は送信される予定の電子メールのリストを持っていないということです(ただし、それが役に立つのは本当にわかりませんが)。

私の質問は実際です。この場合のベストプラクティスは何ですか?ほとんどのウェブサイトはこれをどうやって処理していますか?私はこの方法2.

欠点選ぶだろう

+0

私のための最初の部分は良いです。あなたは本当に電子メールと日付を格納する別のテーブルを作成する必要はありません。たとえば、電子メールを10日後に送信し、その部分をコードの日付のような列にコーディングしてcronで実行させる、作成済みのテーブルに別の日付列を作成するだけです。あなたが各ユーザの電子メールをセッションに保存していれば、その電子メールは簡単です。 email _toの部分に$ _SESSION ['email']と書くだけで、ログインしたユーザーの電子メールが適切な人に送信されます – fizzi

答えて

0

は本当にdisavantageではありません。あなたが "注文"テーブルを持っていると仮定すると、メールのリストを取得して、あなたのcronで使用されているクエリと全く同じクエリを送信することができます。

しかし、それは個人的な選択です。私はどの方法が普通に使われているのか分かりません。

0

私は両方のオプションの組み合わせに行きます、そして、私が現在開発しているシステムでそうしている方法です。

「送信準備ができました」のリストは、電子メールのログ記録や追跡に役立ちます。たとえば、サードパーティのメール送信ソリューションを使用している場合、月間の電子メール数が限られている場合など、あなたのプログラムの中から使用されていて、さらに電子メールが必要なので、必要に応じてアカウントの自動アップグレードを起動することさえできます。

必要な柔軟性は、そのテーブルの優れたスキーマを設計することによって達成できます。一度データベースに挿入されているため、実際には柔軟ではありません

|---------|---------|------|---------|-------| 
| send_to | subject | body | send_at | sent | 
|---------|---------|------|---------|-------| 

send_at列を変更するために、あなたがデータを取得する必要がありますので、私が推測するようにあなたが説明

ソリューションは、スキーマを持っています注文から、send_atの値を再計算します。

私はそうのようなスキーマを提案する:

|---------|---------|------|-----------|---------|-------| 
| send_to | subject | body | added_at | send_in | sent | 
|---------|---------|------|-----------|---------|-------| 

変更がsend_at列が修正されていないということです。あなたがcronを実行すると、次のクエリに一致する電子メールのみを取得します:

!sent && added_at + send_in >= now 

これは、使用して最初のスキーマを問い合わせると同じ結果を返します。

!sent && send_at >= now 

しかし、今、あなたは簡単にできます電子メールがキューに追加されてから実際に送信されるまでの待ち時間を変更します。

関連する問題