2010-11-18 17 views
0

私たちの活動に関するクライアントのニュースを送信する必要があります(迷惑メールではなく、退会することができ、質問には関係しません)。毎日午前4時頃にメールを送信する必要があるので、メールを送信するURLを呼び出すcron-jobを作成することを当然考えました。それから私はいくつかの調査を行い、同時にすべてのユーザーに電子メールを送信することは、サーバーリソースの枯渇や、スパムWebサイトとしてマークされる可能性があるため、最良の選択肢ではない可能性があることを知ったこのような何かをやって:cronを使用して電子メールでユーザーにメールを送信する

は スクリプトは10分ごとに実行され、(script2.php) script2.php別のスクリプトを呼び出しているのcronを作成します(script1.php)PHPスクリプトを呼び出し、cronジョブを作成 存在していれば、データベース上でクエリを実行し、まだ郵送されていないx個のエントリを検索する。 は、それらのユーザにメールを送信する。 データベースフラグを更新する再度メールを送信する場合 if 「メール送信」フラグをデフォルト値に設定し、新しいcron(10分ごとに実行するもの)を削除するか、またはデフォルトのもの(毎日午前4時に)で上書きします。

コードの不足のため

$unsentEmails = $users->getUnsentEmails($limit); 
if ($unsentEmails != 0){ 
    mailer::sentEmails($emailData); 
    $user->markSentNewsletter($userData); 
} 
else{ 
    utils::resetCronTab(); 
    $user->resetSentNewsletter(); 
} 

申し訳ありませんが、私は私がやりたいことは、このシナリオでは、最善の解決策があるかどうかを把握しようとしている:コードの

は、スクリプト2は、このようになります。また、送信された情報の性質上、可能ならば外部サービスの使用を避けようとしています。

任意のヘルプは

をいただければ幸いです~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

は、私はすでにだったので、私は、これに対するより良い解決策を見つけたと思いますcliでphpを使ってスクリプトを呼び出すcronを作成し、スクリプト内でいくつかの電子メールを送信し、sleep($ seconds)コマンドを使用して次のバッチを待つ。テストサーバー

の作品は

+1

スクリプトで別のcronジョブを作成する必要はありません。 1つのスクリプトを持っていて、開始と制限のパラメータを受け入れることができるようにセットアップしてください。次に、特定の時間の間にx分ごとに呼び出されるスクリプトを作成します。誰かに送る必要がある場合に限り、もちろん送ってください。また、URLで呼び出さないでください。サーバー自体にスクリプトを作成します。 - または - 自分で問題を解決したい場合:このすべてを処理する電子メールサービスプロバイダを調べてください。 :) – Cfreak

+1

あなたはscript1.phpの役割を説明できますか? 「スクリプトがcronを作成する」ということはどういう意味ですか?なぜ別のスクリプトを呼び出さなければならないのですか? – stillstanding

+1

@Raz - serverfaultで 'mailq'を検索し、メールをキューにプッシュするように設計されています。サーバーはいつでも空きスロットがあります。 – ajreal

答えて

1

あなたは2つのスクリプトを持つようにしたいんなぜまず第一に取得していないと答えた人すべてに感謝します。 2番目は冗長です。 あなたのアイデアは大丈夫​​です。私はほんの少しの修正を加えます。 単純なフラグを使用する代わりに、この電子メールが送信されたときにデータを格納します。そうすれば、あなたは通知の周期性を制御することができ、何らかの形であなたのcronjobが、何日目の日が残っているかを見るよりも、特定の日のEメールを送信しなかった場合、この場合、フラグをリセットする必要はありません。

+0

ええ、2番目のスクリプトが必要でないことに気付きました。保存されたデータはどのように見えますか? – Raz

関連する問題