2009-06-10 15 views
2

私は1000人の購読ユーザーがmysqlデータベースにいます。すべてのユーザーに電子メールを送信する場合、どうすればよいですか?PHPですべてのユーザーに電子メールを送信するには?

編集:

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

+0

cronジョブは単なるスケジュールされたタスクです。 (あなたがLinuxマシンにいると仮定して)。私が使ったほとんどのホストには、コントロールパネルのどこかにcronジョブをセットアップするオプションがあります。だから、あなたはcmd行から実行され、そのパス/スクリプトをcronジョブとして設定するPHPスクリプトを作成する必要があります。 – bumperbox

答えて

5

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

0

あなたは、ユーザーごとにの線に沿って何かを各電子メールを取得するには、クエリを設定することにより開始することができます:

SELECT email FROM users; 

あなたはforeachの組み合わせを(使用できる変数に保存されていることを持っていたら)とmail()を使用して各ユーザーに電子メールを送信します。

1

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

0

私はすべてのユーザーと電子メールとステータスでテーブルを作成します。このテーブルを処理するために2または3のCronジョブを設定します。

PHPスクリプトでは、db(limit 30)から30エントリを取り出し、foreachループで処理します。各実行の後に "電子メール"のステータスを変更するか、dbからエントリを削除します。

このようにすれば、サーバがシステム負荷を処理できることを確認できます。誰もが一度にそれをすべて実行scroll down toパソコンへ転送言うよう

$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'); 
} 

しかし:

2

は、次のようなループやメール機能のための組み合わせを使用してください。私は真剣にすべてのサーバーが1000電子メール要求を作成する負荷を処理するかどうか疑問に思う。実行されるcronジョブを実行して、それぞれの実行時にコードが30〜50個の電子メールを送信し、それらを送信するようにします。

1

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

1

メール送信コードを作成コードから切り離す(stefan mai示唆)。すべてのアドレス/サブジェクト/ボディをテーブルに書き込み、後でそのテーブルを処理します。

次に、x分ごとにcron-jobを実行し、y個のメールのみを送信します。一度に送信するメールの数が多すぎると、あなたは思ったよりも速くスパマーとしてフラグを立てる可能性があります。送信が成功した場合にのみ、テーブルからメールタスクを削除します。ユーザーは を待つことを憎む - メール(登録確認のように)即座に送り出されるべき場合

  • あなたが(例えばニュースレター)のバルクメールを送るようになった場合は、これを行う
  • はこれをしません

    phpmailerまたはswiftmailerのようなライブラリを使用してください。

0

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

1

また、PHP Listを試してみることもできます。

PHPリストをインストールし、電子メールアドレスのあなたのDBをエクスポートし、CSVとしてPHPリストにインポートします。その後、ユーザーの管理などについて心配する必要はなく、クリックトラッキングを取得できます。

0

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

端末セッションにcrontab -eと入力してcronジョブを編集します。このようなことを入力します(これは毎晩深夜にジョブを実行します)。

0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php 
関連する問題