2

たとえば、mysqlデータベースに1000人のサブスクライブされたユーザーがいます。すべてのユーザーにメールを送信したい場合はどうすればよいですか?

編集:

(誰もが話している)cronジョブとは何ですか?例を挙げてもらえますか?

4

11 に答える 11

6

送信する必要のあるすべての電子メールを含むデータベーステーブルを作成することをお勧めします。これはかなり迅速に行うことができます。そこから、一番上の行を取得して電子メールで送信し、その行を削除する種類のcronジョブを設定します。このようにして、雑用を並列化でき、ユーザーは、応答ページが読み込まれる前に電子メールが送信されるのを待つ必要がありません。

于 2009-06-10T04:10:22.490 に答える
2

次のように for ループとメール関数を組み合わせて使用​​します。

$rs = mysql_query('SELECT email from emailList LIMIT 0, 10');

while(list($email) = mysql_fetch_row($rs))
{
  // Send Email
  mail($email, 'Your Subject', 'Your Message');
}

しかし、誰もが言うように、すべてを一度に実行しないでください。1000 件のメール リクエストを作成する負荷をどのサーバーでも処理できるとは思えません。実行ごとにコードが 30 ~ 50 通のメールを取得して送信するように実行される cron ジョブを実行します。

于 2009-06-10T05:31:11.443 に答える
1

最善の方法は、サーバーが通常最も穏やかなときにタスクを実行する、選択した言語で cron ジョブを作成することです。PHP を使用する場合でも、cron ジョブを使用してください。ページ リクエストWTF-styleに応答している間は実行しないでください。

于 2009-06-10T04:13:59.637 に答える
1

メッセージ、件名、電子メール アドレスを含む別のデータベース テーブルを作成することをお勧めします。また、PHPMailer ( http://phpmailer.codeworxtech.com/ ) を使用して、SMTP 経由で電子メールを送信します。

于 2009-06-10T05:33:20.287 に答える
1

作成コードからメール送信コードを切り離します (stefan mai が提案したように)。すべてのアドレス/件名/本文をテーブルに書き込み、後でテーブルを処理します。

次に、cron ジョブを x 分ごとに実行し、y メールのみを送信します。一度に大量のメールを送信すると、思ったよりも早くスパマーとしてフラグが立てられる可能性があります。送信が成功した場合にのみ、テーブルからメーリング タスクを削除します。

  • 大量のメール (ニュースレターなど) を送信する必要がある場合は、これを行ってください。
  • メールを即座に送信する必要がある場合 (登録確認など) は、これを行わないでください - ユーザーは待つのが嫌いです

phpmailerswiftmailerなどのライブラリを使用します。

于 2009-06-10T05:35:09.863 に答える
1

PHP Listを使用することもできます。

PHP List をインストールし、メール アドレスの DB をエクスポートして、CSV として PHP List にインポートします。そうすれば、ユーザーの管理などについて心配する必要がなくなり、クリック トラッキングが得られます。

于 2009-06-10T06:17:42.367 に答える
0

送信メールを好きなように処理する PHP スクリプトを作成します (Stefan Mai の回答は、これを行うのに最適な方法です)。作業をログに記録し、実行時に何も出力しないようにスクリプトを設計します (これにより、後でエラーを見つける方法が残されます)。Linux を実行していると仮定すると、指定された時間にスクリプトを実行するように cron をセットアップできます。

crontab -eターミナル セッションに入力して、cron ジョブを編集します。次に、次のように入力します (これにより、毎晩深夜にジョブが実行されます)。

 0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php
于 2009-06-10T14:39:39.937 に答える
0

各ユーザーの各メールを取得するためのクエリを設定することから始めることができます。次のようなものです。

SELECT email FROM users;

それを変数に格納したら、 foreach() と mail() の組み合わせを使用して、各ユーザーにメールを送信できます。

于 2009-06-10T04:10:28.793 に答える
0

すべてのユーザーと電子メール、およびステータスを含むテーブルを作成します。このテーブルを処理するために 2 つまたは 3 つの Cronjobs をセットアップします。

PHP スクリプトで、db から 30 個のエントリを取得し (30 個まで)、foreach ループで処理します。各実行後、「メール」のステータスを変更するか、データベースからエントリを削除します。

このようにして、サーバーがシステム負荷を処理できることを確認できます。

于 2009-06-10T04:49:03.040 に答える
0

すべての電子メールは各ユーザーに固有のものである必要がありますか? そうでない場合は、ユーザーごとに新しいメールを送信せず、1 つのメールに BCC (ブラインド カーボン コピー) を追加します。これにより、smtp サーバーが快適になります。

于 2009-06-10T05:39:53.287 に答える