54

現在、音楽ブログを書いています。管理者は、2 ~ 3 日ごとに新しい記事を投稿します。管理者が記事を投稿すると、すぐに約 5000 人の購読者に一斉メールが送信されます。

大量メール機能を実装する最良の方法は何ですか?

以下の機能は動作しますか?

function massmail() 
{
  $content = '...';
  foreach ($recipients as $r) {
    $_content = $content . '<img src="http://xxx/trackOpenRate.php?id='.$r.'">';
    mail($r, 'subject', $_content);
  }
}

別の質問: 5000 人の加入者全員が Yahoo メールを使用している場合、Yahoo はそれを DDOS 攻撃として扱い、SMTP サーバーの IP アドレスをブロックしますか?

4

11 に答える 11

49

まず、PHPに付属しているmail()関数を使用することは、最適なソリューションではありません。スパムとして簡単にマークされるため、HTMLメールを正しく送信するためにヘッダーを設定する必要があります。コードスニペットが機能するかどうかについては、機能しますが、余分なヘッダーを指定しなくても、HTMLコードが正しく機能するかどうかは疑問です。

HTMLをサポートし、さまざまなmimeタイプをサポートし、SMTP認証(メールをスパムとしてマークする可能性が低い)を備えたSwiftMailerを確認することをお勧めします。

于 2009-07-13T07:58:38.883 に答える
37

すべてのメールをデータベース (キューのようなもの) に挿入し、コードで行ったように一度に 1 つずつ処理します (swiftmailer や phpmailer などを使用する場合は、それも可能です)。

各メールが送信された後、データベースを更新して送信日時を記録します。

それらを最初にデータベースに入れることで、

  1. 誰に送ったかの記録
  2. スクリプトがタイムアウトまたは失敗し、再度実行する必要がある場合でも、同じメールを 2 回送信することはありません。
  3. cron ジョブから送信プロセスを実行し、一度にバッチを実行して、メール サーバーが過負荷にならないようにし、送信された内容を追跡することができます。

返送されたメールや無効なメールを自動化して、リストから自動的に削除できるようにする方法を覚えておいてください。

それほど多くのメールを送信している場合、数回のバウンスが発生することは間違いありません。

于 2009-07-13T08:46:45.777 に答える
18

これはアドバイスであり、答えではありません。専用のメーリングリストソフトウェアを使用する方がはるかに優れています。 mailmanはよく使用される例ですが、mlmmjのような単純なもので十分な場合があります。大量のメールを送信することは、実際には実際に見られるよりも難しい作業です。メールを送信する必要があるだけでなく、メール、さらに悪いことにメールサーバーがスパムとしてマークされないように、「デッド」アドレスを追跡する必要があります。ほぼ同じ理由で、購読を解除する人を処理する必要があります。

これらは自分で実装できますが、特にバウンス処理は難しく、やりがいのない作業です。メーリングリストマネージャーを使用すると、作業が非常に簡単になります。

あなたのメールをyahooにとって口に合うようにする方法に関しては、それはまったく別の問題です。そのすべての欠点のために、彼らはSPFとDomainKeyに大きな在庫を置いているようです。おそらくそれらを実装する必要があり、メールサーバー管理者の協力が必要になります。

于 2009-07-13T08:01:38.877 に答える
14

そのような操作には CRON の使用を検討してください。大量のメールを一度に送信するのは確かによくありません。スパム、DDOS、サーバーのクラッシュなどとして検出される可能性があります。

したがって、CRON は優れたソリューションになる可能性があります。一度に 100 通のメールを送信してから、数分待ってから次の 100 通などです。

于 2009-07-13T08:21:28.243 に答える
11

標準の PHP ツールを使用して 5,000 人に電子メールを送信しないでください。ほとんどの ISP から数秒で禁止され、それを知ることさえありません。これには、メーリング リスト ソフトウェアを使用するか、メール サービス プロバイダーを使用する必要があります。

于 2009-07-13T10:54:42.960 に答える
8

phplistを使用しないのはなぜですか? また、PHP Mailer の上に構築されており、多くの業界リーダーが使用しています。クライアントに大量のメールを送信するために、自分で数回使用しました。phplist の優れた点は、ドメイン レベルと時間制限レベルでメッセージを抑制できることです。

私たちが持っているいくつかの内部キャプチャ システムで行ったことは、ユーザー ベースをメーリング リストにプッシュし、毎日特定のメールをトリガーする cron エントリを作成することでした。可能性は無限大です。それがオープン ソースの素晴らしいところです。

于 2009-07-13T09:53:10.743 に答える
4

また、Pear パッケージ:

http://pear.php.net/package/Mail_Mime http://pear.php.net/package/Mail http://pear.php.net/package/Mail_Queue

すすり泣く。

PS: これらの 5000 通のメールを送信するために mail() を使用しないでください。他の誰もが言ったことに加えて、mail() は、同じ MTA に対しても、メール セットごとに個別のソケットを作成するため、非常に非効率的です。

于 2009-07-13T17:09:59.790 に答える
3

PHPmailer クラスも見てください。PHPメーラー

于 2009-07-13T08:30:55.277 に答える
0

私はすでに と を使用してそれをLotus Notus行いPHPました。

mail serverこのソリューションは、メール サーバーにアクセスできる場合、または管理者に何かを要求できる場合に機能します。

1) mail server:営業部にグループを作成する

group2)グループに必要なアカウントを割り当てます

3) グループにインターネット アドレスを割り当てます。salesdept@DOMAIN.com

4) mail 関数を使用して PHP スクリプトを作成します。

$to = "salesdept@DOMAIN.com";
mail($to, $subject, $message, $headers);



それは私にとってはうまくいき、グループに含まれるすべてのアカウントがメールを受信しました。

最高の幸運。

于 2016-01-14T16:05:41.187 に答える