2009-08-06 7 views
0

世界中の人々からのユーザー名と言語コードに関連付けられた約5,000〜10,000(個々のユーザーが提供する)の電子メールアドレスを持っています。また、電子メールを送信するユーザーの異なる言語に1つのメッセージが翻訳されています。今、私は電子メールの実際のテキストがユーザー言語に基づいて変化し、私が電子メールを送信している人のユーザー名でパーソナライズされた、各アドレスに単一のプレーンテキスト電子メールを送信したいと思います。タイムアウトなしでプログラムによるバルク電子メールのカスタマイズ

パーソナライズされた要件と、重複しているがユーザーリストが異なる1年または2回のみメールが送信されるため、正式なメーリングリストはおそらく(&)です。サードパーティのバルク電子メールサービスもあります。

プログラミング時間を無視すると、これは(できれば)PHPでこれを行うには、手作業で最も時間がかかりません。 (私はスクリプトを書いていますが、必ずしも "ボタンを押して送信"する人にはなりません)理想的な結果は、スクリプトを実行するための単一のコマンドリスト)、すべての電子メールはユーザー介入なしで送信されます。これは、メールリストが使い果たされるまで、スクリプトを繰り返し実行するようなcronジョブを設定することを避けることを意味しています。

これは1年前に行われたときに、ユーザー名、電子メールアドレス、言語コードを行ごとに電子メールリストに読み込んで、希望の電子メールテキストを作成するPHPスクリプトを作成しましたPHPMailerに個別に送信します。私が持っていた問題は、スクリプトのタイムアウトと私はそれが私が正しい場所で再び開始する電子メールリストをトリミングできるようになったのか分からなかった。私は手動で1つの電子メールリストをいくつかのサブリストに分割してしまい、スクリプトがタイムアウトしないように十分短かった。タイムアウトを避けるか、スクリプトが手動で再起動できるように電子メールアドレスを賢明にするためにスクリプトがどこにあるのかを把握し、誰にも複数回電子メールが送信されないようにするにはどうすればよいですか?

ブラックリストなどを避けるなど、他に考慮すべき問題はありますか?

答えて

2

メモリのために関数set_time_limitとおそらくini_set( 'memory_limit'、xxMB ')について読む必要があります。

ウェブプロセスからphp cliスクリプトを実行すると、フォーク(pcntl_fork)が親を強制終了します(親cliプロセスが終了します)。スクリプトを実行しているWebサーバースレッドは、他のコードを続行するか、終了します。

これで、cli子プロセス(A)は電子メールを送信する子(B)をフォーク(親になる)し、監視することができます。子Bが死亡した場合、現在の親Aプロセスは再びフォークすることができ、新しい子は前の休止した場所で継続する。

親プロセスとのファイル/ db /共有メモリまたはペアソケット(socket_create_pair)を介して電子メールを送信した人を追跡する必要があります。

私はあなたがそのアイデアを得ることを願っています。

1

PHPはここで仕事に適したツールではありません。ウェブサーバとは独立して実行されるものが必要です(潜在的に起動される可能性もありますが)。

たとえば、PHPからsystem()を別のスクリプト(Perl?Python?)に持ち出すことができます。これは、データベースからジョブ情報を読み取り、その作業をバックグラウンドにフォークします。

+0

PHPはpythonとperlのようにこの仕事に適しています。大きなボトルネックは、あなたが推測するメールサーバー/ネットワークになります。 – OIS

1

あなたはCronスクリプトがありません - あなたのサーバー上のCronにアクセスできないですか?または、メールジョブを送信する必要があるたびに手動でCronジョブを設定したくないという懸念はありますか?

http://pear.php.net/package/Mail_Queueをご覧になりたいと思うかもしれません。それは私が最近使用しているものです。すべてのメールを一度にメールキューにダンプすることができます。これは、実際にメールを送信するよりもはるかに高速です。なぜなら、サーバー間の通信に対処する必要がなく、データベースだけで済むからです。

次に、数分おきに、Mail_Queue :: sendMailsInQueueコマンドを呼び出して、Cronコールごとに送信する電子メールの数を制限するCronスクリプトを作成します。それがあなたの懸念事項であるならば、あなたはCronスクリプトを混乱させる必要はありません。キューが空の場合、ただ終了します。あなたの電子メールは、1通話につき合理的なペースでサーバーから流出します。これは、cronコールごとの電子メールの制限によるタイムアウトを防ぎます。また、一度にたくさんの電子メールが突然叩かれることに喜んでいないかもしれない他のメールサーバーとのトラブルを避けるのに役立ちます。

+0

プライバシーの理由から、実際のメールリストにアクセスすることはできません。今年は他の誰かがスクリプトを実行している可能性が最も高いでしょう。私はできるだけ間違いを起こさないように、可能な限り小さなアクションを必要とする解決策を望んでいます。 – KTC

関連する問題