「みんな教えて! 選手権!!」開催のお知らせ

DBに登録されているメールアドレスにメールを送りたいんですが、
処理が遅くて困っています。
どのような書き方が一番効率がいいか教えてください。

A 回答 (6件)

構文に不安があるのでしたら、PHPで大量メール送信に優れたクラスがあります。


こちらを利用してみるのも手だと思います。

参考URL:http://phpmailer.sourceforge.net/
    • good
    • 0

DNSをローカルで持ちましょう。



トラフィック処理力の有るDNSを探しましょう。

一通枚に処理するのではプロセスの起動のオーバーヘッドがデカイので100通やら1000通など効率の良い固まりの大きさを探しましょう。

メモリが大きなルータを使いましょう。

SQLを見直しましょう。

サブクエリなどを必要とする複雑な処理なら結果を先にどこかに保存してからまとめてやりましょう。

はやいコンコンピュータを使いましょう。

DBとのコネクションプーリング、高速な接続方法の検討などDB接続の基本を見直しましょう。

困るだけじゃだめです、何か自分で考えて試しましょう。
#試行錯誤すればするほど懐が深くなるものです。
    • good
    • 0

1分で数千通っていうのは、現実的には難しいでしょうね。

工夫を重ねれば出るスピードだと思いますが、とにかくメールを大量に速く送信するノウハウは、プログラムだけでなくサーバーのセットアップやMTAの設定によるところも大きいです。僕も商売でメルマガ発行システムなど手がけていますが、そのノウハウはちょっとここには書けません(^^;。商売のネタだからというのもありますが、書ききれる内容じゃないんです。

10人に送って1通1秒というのは遅すぎかなとは思いますが、スクリプト自体はすぐに終わりますか?スクリプト自体が1ループ1秒かかってるとしたら、どこで時間が掛かっているのかをスクリプトの随所で時間を表示させるようにして(できればマイクロ秒まで)どこが遅いのか突き止めましょう。

あとPHPからmailコマンド等でsendmailにメールを渡しているのだと思いますが、ここから先が遅いようでしたらそれはスクリプトの問題ではありません。MTAの設定が悪いのか、サーバーの負荷自体が高いのか、queueが溜まりまくっていて遅いのか、など調べる事は山のようにあります。

MTAはsendmailですか?POSTFIXにするだけで何割かは速くなると思います。一般論ですが。

一度一番単純なメール送信スクリプト、10人なら10コのアドレスを配列に入れてループさせて送るだけのものを書いてみて、それでテストしてみたらどうですか?
    • good
    • 0

SENDMAILが遅いのかもしれません。


どのように送っているのかは不明ですが。

予想ですがPHPの問題ではないような気がします・・・

ためしにメールを送らないで、メールアドレスを表示するだけにしてみたときと比較すればメール送信にかかる時間がどの程度かが分かると思います。
    • good
    • 0
この回答へのお礼

時間指定が出来るメールで、15分単位で自動的にPHPを自動で動かすようにしています。
自動で動かすときにコマンドプロンプトが立ち上がるのですが、結構時間がかかってるみたいなのでどうにか早くならないものかと質問しました。
プログラムはデータベース内に「システム時間>送信したい時間メール」のものを抽出しメールを送信するものです。
今度メールを送らないで試してみます。

お礼日時:2005/05/31 22:07

メール数が大量の場合、メーリングリストを使うと便利です。



DB → 転送 → メーリングリストのメンバー更新 と

1)メンバーをDBに保存。
2)DBからデータ送信し、メーリングリストのメンバー更新。
3)メール送信。

メーリングリストは、管理者のみが送信出来るようにしておけば
良いと思います。

この環境で、5000~6000人宛のメール送信をしています。

この回答への補足

ありがとうございます。
メーリングリストが大量にメールを送るには一番いい方法だとは思うのですが、色んな種類のメンバがいるのでたくさんのメーリングリストを作成しなければならないのでなるべくPHPのみでやりたいと思っています。

補足日時:2005/05/24 19:42
    • good
    • 0

一度に何通位送るんですか?メールを速く、大量に送るというのはPHPの問題だけじゃなく色々なポイントがあります。

ひと言で遅いと言っても、PHPの問題なのか他の問題なのかわかりませんので、まずはボトルネックを探しましょう。

・一度に何通位送るんですか?
・遅いと言うのはどの位遅いんですか?
・求める速さはどの位ですか?
・遅いと思われる原因は推測できませんか?

この回答への補足

・一度に何通位送るんですか?
数十通から数千通くらいです

・遅いと言うのはどの位遅いんですか?
テストで10人くらいに送ったんですが、1人1秒程度かかりました

・求める速さはどの位ですか?
数千通になると数千秒くらいかかる計算になるので、数千通でも1分くらいで送れるといいのですが・・・

・遅いと思われる原因は推測できませんか?
PCのスペックもあると思うのですが、プログラムの記述も効率の悪い書き方をしているような気がします

細かい内容は覚えてないんですが、データベースからメールアドレスをループで呼び出しその中で1アドレスずつメール送信しています。

補足日時:2005/05/24 19:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報