1

php/mysql で独自のメール ディスパッチャーを作成する必要があります。Amazon の SES を使用してメールを送信しています。「キュー」MySQL テーブルに、誰と何を電子メールで送信する必要があるかの記録があります。各レコードは、電子メールの送信が成功すると削除されます。これらのメールをできるだけ早く送信したいのですが、Amazon の割り当てを念頭に置く必要があります。許可されたメール送信/秒を制限します。

これを制限を超えないようにするにはどうすればよいですか?キューから X 個のレコードのみをプルして送信する php cron スクリプトを作成できることはわかっていますが、cron が 1 分間に 1 回しか実行されない場合、多くの無駄な時間が発生します。(X はクォータ制限/秒)

一方、電子メールの割り当て量が増えて、1 秒あたり 1000 件 (またはばかげたこと) を送信できる場合、スクリプトの実行に時間がかかると、問題が発生する可能性があります。cron が再度実行され、キュー テーブルから同じレコードがプルされる可能性があります。

4

1 に答える 1

2

スクリプトを実行するときにロック ファイルを作成し、実行が完了したら削除する必要があります。これにより、前回の実行が完了していない状態でスクリプトが再度実行されている場合に、自分自身に警告することができます。

$filename = 'sending_emails.txt';
if (file_exists($filename)) {
    mail('your@email.com', 'Execution overlap', 'Adjust script parameters!');
    exit;
}
file_put_contents('sending_emails.txt', '1');
// Send e-mail logic here
unlink($filename);
于 2012-09-19T12:53:39.790 に答える