5

私のサイトには80,000人のユーザーがいますが、最近、使用していたフォーラムスクリプトから離れて、自分でも同じように機能する非常にシンプルなものを作成しました(フォーラムスクリプトは肥大化していて、私のシンプルなサイトにはリソースを大量に消費していました)。

私が失った唯一のことは、すべてのメンバーに大量の電子メールを送信する機能です。

だから私は自分でそれを行うためのスクリプトを考え出すことを探しています。周りを見回した後(ここでの質問を含む)、SwiftMailerを使用することをお勧めします。

しかし、私はすべてのドキュメントを読み終えましたが、「一度に100」と言う送信方法がわかりません。また、その方法がわかりません。

簡単に言えば。「件名」と「メッセージ」の2つの入力があるフォームの管理パネルがあります。[送信]をクリックすると、サーバーがクラッシュしたりスパムとしてマークされたりせずに80,000通の電子メールを送信するための最も安全な方法は何ですか?

私は非常に強力な専用サーバーを使用しているので、共有サーバーに関連する問題はありません。

アドバイスをよろしくお願いします!

4

4 に答える 4

1

安全なオプションは、次々にメールを送信することです。私は通常、10分ごとに10通以下の電子メールを送信します。必要なのはcronによって起動される単純なスクリプトだけです。

一度に多くの電子メールを送信することは1つのことですが、それらすべてをサーバーフィルターに配信して渡すことは別のことです...

于 2010-04-05T12:13:23.103 に答える
0

Swiftmailerのようなクラスには、大量の電子メールを送信するオプションがあります。

于 2010-04-05T12:59:35.167 に答える
0

これが私の考えです...あなたがLinuxタイプのボックスでホストされていると仮定します。もちろん、これはコードを知らなくても最低限のことです。sendmails.phpという名前のファイルをサーバー上に作成します

<? 
loop through email addresses however you do it
{
 usleep(250000); // sleep for quarter of a second 
 mail('user@example.com', 'My Subject', 'message');
}
?>

それを保存してから、別のファイルstartemails.phpでブラウザで開くことができます

<?
system("&php sendmails.php");
?>

サーバーがタイムアウトした場合でも、システムコールはその作業を完了する必要があります。この方法を使用すると、80,000通の電子メールが約6時間以上送信されます。usleepの時間を変更して、多少の時間を要します。

于 2010-04-05T17:01:07.797 に答える
0

cronの代わりに、このためのデーモンプロセスが必要であり、SwiftmailerはそのATMを簡単に実行できません。問題はこれです:Swiftmailerが5分ごとに言うようにCronjobトリガーを設定することができますが、10000通のメールの送信がまだ完了していない場合はどうなりますか?おそらく別のプロセスを開始するため、多くのプロセスが同じファイルをキューに送信しようとすることになります。

私は回避策を使用して、キューに電子メールがあるかどうかを継続的にチェックする単純なPHPデーモン(bashスクリプトも正常に機能します)を作成しました。その場合、Swiftmailerを起動し、1通の電子メールを送信します。(swiftmailerの制限を1に設定します)。次に、daemonscriptは0.5秒間待機し、再度チェックします。

Swiftmailerは、必要に応じて複数のキューを処理できます(キューごとに2番目のデーモンプロセスを開始する必要があります)。

残念ながら、Swiftmailerには「send /」フォルダがないため、送信されると消えてしまいます。したがって、エラーが発生した場合は、ファイルを「send/」からキューに戻して再送信することはできません。

于 2015-01-03T18:02:48.630 に答える