私は1000人の購読ユーザーがmysqlデータベースにいます。すべてのユーザーに電子メールを送信する場合、どうすればよいですか?PHPですべてのユーザーに電子メールを送信するには?
編集:
(誰もが話している)cronジョブは何ですか?例を挙げることはできますか?
私は1000人の購読ユーザーがmysqlデータベースにいます。すべてのユーザーに電子メールを送信する場合、どうすればよいですか?PHPですべてのユーザーに電子メールを送信するには?
編集:
(誰もが話している)cronジョブは何ですか?例を挙げることはできますか?
私は、送信する必要があるすべての電子メールを含むデータベーステーブルを作成することをお勧めします。これはかなり迅速に行うことができます。そこから、一番上の行をとり、電子メールで送信し、行を削除する種類のcronジョブを設定します。こうすることで、雑用を並列化することができ、ユーザーは応答ページが読み込まれる前に電子メールが送信されるのを待つ必要はありません。
あなたは、ユーザーごとにの線に沿って何かを各電子メールを取得するには、クエリを設定することにより開始することができます:
SELECT email FROM users;
あなたはforeachの組み合わせを(使用できる変数に保存されていることを持っていたら)とmail()を使用して各ユーザーに電子メールを送信します。
あなたの選択した言語でcronジョブを作成するのが最も良い方法は、サーバーが通常最も静かであるときにタスクを実行することです。 PHPを使用する場合は、引き続きcronジョブを使用します。ページ要求WTF-styleに応答している間にはしないでください。
私はすべてのユーザーと電子メールとステータスでテーブルを作成します。このテーブルを処理するために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');
}
しかし:
は、次のようなループやメール機能のための組み合わせを使用してください。私は真剣にすべてのサーバーが1000電子メール要求を作成する負荷を処理するかどうか疑問に思う。実行されるcronジョブを実行して、それぞれの実行時にコードが30〜50個の電子メールを送信し、それらを送信するようにします。
メッセージ、件名、電子メールアドレスを含む別々のデータベーステーブルを作成することをお勧めします。また、PHPMailer(http://phpmailer.codeworxtech.com/)を使用してSMTP経由で電子メールを送信します。
メール送信コードを作成コードから切り離す(stefan mai示唆)。すべてのアドレス/サブジェクト/ボディをテーブルに書き込み、後でそのテーブルを処理します。
次に、x分ごとにcron-jobを実行し、y個のメールのみを送信します。一度に送信するメールの数が多すぎると、あなたは思ったよりも速くスパマーとしてフラグを立てる可能性があります。送信が成功した場合にのみ、テーブルからメールタスクを削除します。ユーザーは を待つことを憎む - メール(登録確認のように)即座に送り出されるべき場合
phpmailerまたはswiftmailerのようなライブラリを使用してください。
すべてのメールを各ユーザーに固有のものにする必要がありますか?そうでない場合は、各ユーザーに新しいメールを送信しないで、BCC(ブラインドカーボンコピー)を1つのメールに追加します。これはあなたのsmtpサーバーを幸せにするでしょう。
また、PHP Listを試してみることもできます。
PHPリストをインストールし、電子メールアドレスのあなたのDBをエクスポートし、CSVとしてPHPリストにインポートします。その後、ユーザーの管理などについて心配する必要はなく、クリックトラッキングを取得できます。
送信メールを処理するPHPスクリプトを記述してください(Stefan Maiの回答がこれを行うには最適です)。実行時に何も印刷しないようにスクリプトを設計します(これにより、後でエラーを見つける方法が残ります)。 Linuxを実行していると仮定すると、指定された時間にスクリプトを実行するようにcronを設定できます。
端末セッションにcrontab -e
と入力してcronジョブを編集します。このようなことを入力します(これは毎晩深夜にジョブを実行します)。
0 * * * * wget -O - -q -t 1 http://www.example.com/mymailer.php
cronジョブは単なるスケジュールされたタスクです。 (あなたがLinuxマシンにいると仮定して)。私が使ったほとんどのホストには、コントロールパネルのどこかにcronジョブをセットアップするオプションがあります。だから、あなたはcmd行から実行され、そのパス/スクリプトをcronジョブとして設定するPHPスクリプトを作成する必要があります。 – bumperbox