2009-08-25 4 views
0

専用のIPに過負荷をかけずに1つのPHPスクリプトリクエストから約3000件以上のメールを送信する方法はありますか?最大500時間ですか?PHP一括電子メール - 専用のIP Max?

あなたが私を得るいけない場合は...ここで、私は私の専用IP経由で時速PHPでメール()関数を経由して500通のメールを送ることができます

:)詳細である私は送ることができどのような方法がありますメールアドレスから引っ張られた電子メールの行は3000行ですが、mail()機能は毎時500回実行されます。

ありがとうございました!

+0

関連するデータベースはありますか? –

+0

ええと...電子メールを保持している私は自動送信されます... – tarnfeld

答えて

2

電子メールメッセージ用と受信者リスト用の2つのテーブルを作成します。 次に、cronによって実行されるスクリプトを作成して、メッセージテーブルに新しいメッセージがあるかどうかを確認します。そうであれば、バッチのメールを次の受信者のセットに送信します。メールが送信された後、各受信者に印を付ける。

次に、メッセージを作成して受信者をメッセージに添付するためのWebインターフェイスを作成し、ユーザーがメッセージをマークしてcronジョブを受け取って処理します。

送信するメッセージがない場合、cronジョブは何も行いません。

+0

うーん、これは考慮する1つです、ありがとう:) – tarnfeld

1

あなたはコールの間にスリープ状態になることができます。すでにデータベースに入っている場合は、そのフィールドに送信時のフィールドを入力します。次に、送信されていないものを選択し、そこから開始します。

+0

事は..私はこれが完全に自動化したいですか?クライアントのために... – tarnfeld

+0

私は彼があなたが "送信"されていないものを手作業で "選択"することを示唆しているとは思わない。私は彼がSQL selectを意味すると思う。 – glomad

+0

どのように私は "コールの間に寝る" – tarnfeld

1

DBにフィールドを入れて、最後のメールが各ユーザーに送信された時刻とそのメールを表示します。あなたが送信した電子メールと、それがまだすべてのユーザーに送信されているかどうかを示す別のDBテーブルもあります。

User Table: 
Id, UserName, Email, etc, DateTimeOfLastEmail, LastEmailId 

Email Table: 
Id, EmailSubject, EmailContent, DateTimeSent, SentToAll(True/False), DateTimeOfFinish 
+0

事は..私はこれが完全に自動化したいですか?クライアントの場合...これはクライアントが1時間以内にログインし、次のバッチを送信することを意味します... – tarnfeld

+0

あなたはCronジョブを使って、送信する必要のあるメールがあるかどうかを確認することができます。もしそうなら、 –

0

834秒ごとにメールを送信することもできますが、それでも問題は解決しません。私はもう一つのアプローチは、DBを使用して500を照会し、毎時スクリプトを実行するCRONジョブを持つことだと思います。

DBテーブルでは、電子メールが送信された後にスクリプトのフィールドを更新して、次のcronジョブが照会して送信する必要のある次の500件の電子メールを取得できるようにすることができます。

+0

私はすべてのアイデアが好きです。例えば10秒です。私はこれを私のために自動化したいクライアントではないので、cpanelでcron-jobsを実際にセットアップすることはできません。 – tarnfeld

+0

cronジョブは、電子メールにかかわらず10分ごとにPHPスクリプトを実行します。 PHPスクリプトは、次の電子メールを取得してそれを送信し、電子メールが送信されたかどうかDBテーブルを更新するようにDBにクエリします。 PHPスクリプトが一度実行できるので、送信する次の電子メールをクエリし、いくつかの更新を行い、おそらくタイムスタンプと電子メールが再試行されたかどうかを確認するロジックを持つように、テーブルのフラグのようなもの... –

1

ありがとうございました! 私が見つけた最良の方法は、実際にはsleep()を使って400個のメールをテストしたときにsleep()をsleep()することでした。これは17秒かかりました:)

ユーザは450制限を超えて送信しますしかし、もしそれらがif文を持っていれば、while()は450行以上があるかどうかを確認して終了し、そうであればそれぞれの間でスリープ状態になるでしょう:

ありがとう!

関連する問題