メールを一旦DBに溜めて遅延送信 with CakePHP

ただいま受注している案件として
バーコードを用いたタイムレコーダシステムを作成中です。
それなりに多機能です。というか、俺すげー!!って感じです。

ハマったところをチョイチョイ書いて行こうかなと。

【打刻の流れ】
打刻があったらajaxを使って、
IDとパスワードの認証->DBに打刻データを追加->打刻お知らせメール送信->打刻完了画面を表示
で、一括で処理を行っていたのだが、ここでちょっとハマる。

メール送信をするところで、
サーバ状況や、タイミングによって、送信処理がなかなか終わらない。

終わらないと打刻完了画面が返ってこない

打刻した人、わけがわからないからもう1回ためす。
↓→→→→→→→→戻ってやりなおし ↑

送信・登録処理がエラーになっているわけではないので、やり直した分だけメールが送られてしまう(汗)

こえええぇえ…
ということで、レスポンスを最速にするためにいろいろ考えた結果、
打刻があったら一旦メールをdbにためて、一定時間ごとにcron使ってチェックして別処理させることにした。

試行錯誤のうえ、一応完成。
DB登録の場合は流石にレスポンスも早い。実用に十分耐える反応を示してくれるようになりました。

まとまってきたところで、ググってみると・・・(順序逆っぽいけど)
http://pear.php.net/manual/ja/package.mail.mail-queue.mail-queue.tutorial.php
PEAR にそういう機能があるんですね、やり方は間違ってなかった!!

コレを応用して、送信時刻予約のできるメール機能もついちゃったよ!すごい!

支離滅裂。

コメントを残す

メールアドレスが公開されることはありません。