0

メーリング リスト アプリケーションを作成しています。メールサービスの制限により、1時間に40通のメールを送信します。タイマーを追加するにはどうすればよいですか?

4

4 に答える 4

3

スケジュールされたタスクを作成する必要がある場合は、Cron Jobを作成することをお勧めします。

于 2010-09-27T01:22:20.443 に答える
1

関数を使用してスクリプトを一時停止できsleep()ます。しかし、それは良い解決策ではありません。はるかに優れたアプローチは、40 分ごとに 1 回スクリプトを実行できるCronを使用することです。スクリプト自体は、これまでに実行された回数のみを確認する必要があります。その情報は、いくつかのファイルに保存できます。

$counter = file_exists('counter') ? file_get_contents('counter') : 1;

echo sprintf('Send %d portion of emails.', $counter);

file_put_contents('counter', ++$counter);
于 2010-09-27T01:26:19.077 に答える
0

私はこれを見つけました: http://swiftmailer.org/docs/throttler-plugin

于 2010-09-27T01:27:33.863 に答える
0

1 つの解決策は、送信した電子メールの詳細を保持するデータベース テーブルを作成することです。次のように見えるとしましょう。

CREATE TABLE SentEmail (
    email_id INT NOT NULL,
    recipient_id INT NOT NULL,
    time_sent DATETIME NOT NULL,
    PRIMARY KEY (email_id, recipient)
)

email_idこれは、送信用にマークした電子メールを含むテーブルへの外部キーであるrecipient_id必要があり、受信者の詳細を含むテーブルへの外部キーである必要があります。time_sent電子メールが送信された時間を明らかに記録します。

今、あなたがメールを送信したいとき、あなたは知りたいと思うでしょう

  • この時間に送信された電子メールの数。COUNTこれはクエリを使用して見つけることができます
  • あなたが現在扱っている電子メールをすでに送信した人; これも単純なクエリです。

これに関する考えられるバリエーションは、これまでに送信されたすべての電子メールに対して 1 つだけではなく、送信しようとしている電子メールとユーザーの組み合わせごとにテーブルに行を持ち、その電子メールがそのユーザーにまだ送信されているかどうかを示す列を持つことです。 . これにより、まだメールを送信しなければならない相手も簡単にわかります。

他の人が提案しているように、このアプローチを Cron ジョブと組み合わせて、メールのキューが定期的に処理されるようにします。

于 2010-09-27T01:28:44.953 に答える