cronを利用してのPHPスクリプトでのメール配信 - PHPプロ!Q&A掲示板

1523

  • 0P

cronを利用してのPHPスクリプトでのメール配信

質問日時 / 2008年9月27日 18:48    回答数 / 2件

Questioner:  info_ms  このエントリーをはてなブックマークに追加 

キーワード / cron    メール    PHP   

メールマガジンを指定の時間に配信するシステムを制作予定です。

となると、cronで指定した時間にPHPを実行する、となると思うのですが。
1つ問題があって、共有サーバーなのでメールの配信数に制限があり、1時間に1000通までとなっています。

これは手動のメルマガ配信では、ajaxを使用して、ブラウザから8秒に2通送信させる形で対応しています。

しかしcronを利用するとなると、それもできないですし、プロセスが30秒以上かかってしまうcronの実行は禁止とのことです。

そうなるとPHPでsleepで遅延させる、ということも難しい。

何か他にいい手はないものか考えているのですが、どなたかいい方法をご存知でしたらお教え下さい。

PS cronで実行する言語としてPHPは適さない、との意見を以前他のサイトで見つけたことがあります。
  それって、具体的にはどういうことなんでしょうか?

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01NurseAngelメルマガとユーザをDBで管理していると仮定して。
┗A02galluがると申します。 色々問題異論その他ありますが。取

回答一覧

並び替え:

A01
answererNurseAngel [9月28日 01:23] (最終編集:9月28日 01:24)

メルマガとユーザをDBで管理していると仮定して。

まずメルマガ取得
select * from メルマガマスタ where sended_flg=0 and send_start>now() limit 1
として送信が終了していない、かつ送信開始時刻以降のメルマガを取得、
ユーザ取得時に
select * from ユーザマスタ where sended_flg=0 limit 1000
として未送信フラグの立っているユーザのみを1000件取得。

メールの送信後
update ユーザマスタ set sended_flg=1 where ユーザID=***
としてユーザ毎にメール送信済をチェック。
これを一時間毎にcronで実行
とかでいいのではないでしょうか。

最終的にユーザが一人も取得できなくなったら、
update メルマガマスタ set sended_flg=1 where メルマガID=**
update ユーザマスタ set sended_flg=0
としてメルマガの送信完了を設定すると。


単純に実装すると、メルマガを同時に沢山登録したら古いメルマガが送られないユーザが出てきたりする可能性があったりします。
まあそこらへんはテーブルとSQLの組み方でどうにかなりますので適当に。

一気に1000件だと30秒超えると思うのでもう少し小刻みにした方がいいかも。
勿論サーバの上限が1000件/時間ですので、同時に2000人にメールを送信するとかは無理です。

この意見に回答する

ツリーへ TOPへ

A02
answerergallu [9月28日 18:59]

がると申します。
色々問題異論その他ありますが。取り急ぎ「バックグラウンドで処理をさせたい」のであれば、UNIX系のOSである事を前提に、
[言語][プログラミング][PHP]場当たり的バックグラウンド処理 PHP編
http://d.hatena.ne.jp/gallu/20070911/p1
このあたり、お役に立ちませんでしょうか?

手前味噌恐縮ですが。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
PHPでのRSS表示までの流れについて
 このエントリーをはてなブックマークに追加 
A
get_headers()だとフィードを重複取得したり、宜しく無い様なので、 この件は忘れて、フィード内の以下の値をチェックしてください。 RSS1.0: channel>d:date RSS2.0: channel>lastBuildDate ATOM: modifi...

>>続きを読む

phpファイルをどう分けるか、といった問題は経験のある人に相談すると安心できますね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)