• ベストアンサー

1000件分ループでSendmal送信したサーバー負荷

CGIで、相手の名前、メールアドレスの1000件くらい登録されているテキストファイルを読み込み それぞれを配列に入れて、その後、メールヘッダーのto:にメールアドレスを代入したり、本文に相手の名前を代入したりしてから、Sendmailで送信をする、というのを登録件数分繰り返すということをすると、サーバーに負荷は、かなりかかるのでしょうか? よく大量の広告メールを送信して、サーバーがダウンしたというのを聞きますが、プログラムは作れますが、いざ使ったらそうなったということになると、ホスティング会社に悪いなぁと思うもので事前に知っておきたいのです。 ちなみにホスティングはlolipopを使っています。多分件数は、増えていっても1万とかにはならないと思います。

質問者が選んだベストアンサー

  • ベストアンサー
  • you-m
  • ベストアンサー率58% (190/327)
回答No.4

難しいことを聞きますな(笑) 多分、瞬間風速的には、BCCの方が高そうな気がしますね。 結局、負荷のピークになる処理が変わるだけで、全体的にはそう大差は無いでしょう。 これは、CGI上でこのような処理を行ったらという話ですよね? メールを送るという処理において、最後はsendmail君が、いろいろがんばる点は変わらないわけです。 ちなみにこの場合、ファイルのオープンクローズの負荷自体は、さして問題にならないと思います。 ポイントは、sendmailの送信処理というのが、非常に重い処理であるというところです。アンチsendmailなSMTPサーバはいくつかありますが、それらは、大抵機能をモジュール化した分、ファイルをオープンする数は増えても、送信処理全体としては、軽量化されています。 どのような大量メールであるのかわかりませんが、BCCで送るのが失礼という認識は大変重要です。現在このような仕組みは、送信対象ごとに名前を差し替えるくらいは当然のように行っていますので、今はできなくても、将来的にはそういうことを視野に入れるのであれば、BCCでの送信は避けるべきかと思います。 サーバ上にアドレス一覧データを、どうPC上と同期を取るかという点はありますが、自分のPC上で、そのCGIに該当するアプリを作成して、送信する方が、まだいいのでは無いかと思います。 それとも、自分以外の人間がメール送信できないと困る用件があるのでしょうか。

souta_n
質問者

お礼

なるほど、なんとか分割処理して、1回当たりの送信件数を制限するというやり方を考えます。 >どのような大量メールであるのかわかりませんが、 >自分以外の人間がメール送信できないと困る用件があるのでしょうか。 一般的にある相互リンク系サーチエンジンの様に1対多ではなく、多対多で相互リンクをお願いし合うコミュニティの様なものを考えています。ユーザーが相互リンク依頼先の選択余地なしでメールを送るようにするとリンクファームの問題がありますので、ユーザーが相互リンク先の一覧から、こことこことここ・・・みたいに選択してメール送信できるようにしたいのです。私が個人的に使う為のものではありません。 いろいろ勉強になります。とにかくlolipopユーザーの近所迷惑にならないように、考えてみます。

その他の回答 (3)

  • you-m
  • ベストアンサー率58% (190/327)
回答No.3

1000件オーダーのメール配信を共有型のレンタルサーバで行うのは、かなり無茶な部類に入ります。 特にsendmailというアプリケーションは、あらゆる機能を一つの実行ファイルに詰め込んでいる為、起動のオーバーヘッドがとても大きいのです。 いわんやそれを1000回も行うとなれば・・・。 大量メール配信を行うアプリで、sendmailを前提にしたものは、私の知る限りでは、sendmail自体の起動は1回(並列処理する場合には最初の時点で並列数分起動します)で、後は事前に作成したsendmailが理解できる形式のキューファイルを独自に指定したスプールディレクトリから読ませてざくっと送信するような機構になっています。 ただし、それでも決して軽いわけではありませんし、そもそもそういった環境は、メール送信に特化された環境であることが多いです。 レンタルサーバのような、複数の利用者が共有しているケースの場合、そもそも他の利用者が、どの瞬間に何をするかわかりませんから、たまたま他の重めの処理とかち合ってトラブルになる可能性は否定できません。 また、そのような大量メール配信をする場合、他にも考えておかなければならない点がいろいろあります。 1.エラーメールの処理をどうするか 2.万が一、送信相手のサイトからスパムとして認識されてしまったらどうするか。 1.については、何らか問題が発生して大量にエラーメールが帰ってきた場合、それもまた、サーバの負荷になることを考慮に入れなければなりません。 2.については、もっとシビアです。何を持ってスパムメールと判断するかは、メールを受信する側(受信者ではなく、受信サイトの管理基準)の判断になります。 特に、hotmailやYahooのようなフリーメールのサイト等は、スパムが多いせいか基準が厳しい傾向にあります。場合によっては、問題視されたメールサーバからのメールがすべて拒否されることにもなります。 私は比較的大きな商用サイトで運用業務に携わったこともありますが、大量メール配信システムでは、実際に何度もそういったことがあり、その都度hotmail側へ、拒否設定の解除を依頼することになりました。 システムが自動的に判断して、拒否設定にする為、その度に解除してもらうという対症療法的な方法しかとれませんでした。 私の場合は、大きな会社であった為、それでもそういった対応をとることが可能でしたが、個人のCGIレベルで起こった場合、果たして相手にしてもらえるでしょうか。また、そうなった場合、問題はlolipopの該当サーバの利用者全員へ影響がでます。 利用停止だけでは、済まないかもしれませんね。 私個人としては、要件的に専用サーバを借りるレベルのものであると思います。 個人で4桁のメール送信というのは、通常レンタルサーバが想定している利用者の範囲を大きく逸脱していますし、最近は安価な専用サーバを提供しているところもあります。もっとも個人の支出としては、やや大きい部類に入るかもしれませんが。 もう一つの選択肢として、DDNS等を利用した自宅サーバというのがあります。 メール送信の為の利用としては、かなり微妙なわけですが、DDNSサービスでは、MXレコードも定義できますし、一応メールサーバとして稼動することができます。 少なくとも、きちんとした定義さえできれば、負荷的に他人に迷惑がかかることは、あまり無いですし、何かスパム扱いされたとしても、基本的に自分のところの問題です。(酷い場合にはプロバイダから突っ込みが入る可能性はありますが) いずれにしても、共有のレンタルサーバで4桁メール送信というのは、避けるべきであると思います。 ちなみに、sendmailがれっきとしたフリーウェアであり、オープンソースソフトウェアです。Sendmail, Incは、このソフトウェアでライセンス料を取ることは、何か例外事項に抵触するような事態でなければ、ありえないでしょう。 http://www.stackasterisk.jp/tech/systemConstruction/sendmail01_08.jsp sendmailが有償なのではなく、sendmailのWin32版を作っている会社がそれを有償ソフトとしているだけです。 http://www.ant.co.jp/Products/products_mail.html sendmailのライセンスはそういったことを禁じてはいません。 もっとも、商用版として様々な改善を行ったsendmailもあるようですが。 また、テストという意味では、sendmailそのもののWin32版は、フリーウェアとしては無いようですが、互換ラッパーというものがいくつかあります。 まさに、CGIやシェルスクリプトで使われる事が多いsendmailを使ってのメール送信をsendmailが使えない環境で実現する為のものです。 必要の無いオプションが削除されていたりするものの、一般的に使われるパターンには対応できるように作られていることが多いです。 Windowsで動くものでは、Cygwinに付属している「ssmtp」やナオポン氏が作成している「sendまねーる」等があります。 以上、ご参考になれば幸いです。

souta_n
質問者

お礼

詳しいご説明ありがとうございます。 かなりやばそうですね。 BCCでまとめて送ってもいいのですが、先方に失礼かな、と思ってちゃんと、一件づつTo:でメールアドレスを指定して、本文に●●様へ みたいにしたほうがいいかなと思ったんです。でも大事になりそうだからやめます。 重ねてお聞きしたいのですが、Bcc:メールアドレス;メールアドレス;メールアドレス;メールアドレス;・・・とした場合のサーバー負荷はどんなものなんでしょう。これならOpen~closeは1回ですから、1000回Open~closeを繰り返すより負荷はすくないのではないかと素人判断しているのですが・・・ $header = <<END; Bcc: $mail_to ←"aaa@a.co.jp;bbb@b.net;・・・で1000件くらい" From: $mail_from<$mail> Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP END open(MAIL, "| $SENDMAIL -i -t -f $mail") or die("ERROR: exec sendmail."); print MAIL $header, $body; close MAIL;

  • terra5
  • ベストアンサー率34% (574/1662)
回答No.2

実際サーバーダウンでもさせようものなら、悪いと思うどころでなく利用できなくなるでしょうね。 http://lolipop.jp/?mode=manual&state=hp&state2=cgi >ご利用前にローカル環境で十分にテストして下さい。万一CGIを暴走させるなどして、サーバーをダウン及び負荷をかけるような運用をされた場合は、以降CGIのご利用を一切ご遠慮いただくようになりますのでご注意ください。 そもそも禁止行為に該当しそうな気がしますが http://lolipop.jp/?mode=order&state=kinshi >行為の制限 > * メールの大量送信(弊社が提供しているメーリングリスト機能・メールマガジン機能を除く) > * スパムメール等のメール送信行為。(弊社サーバー以外から送信したスパムメール内に弊社提供サーバーのURLを記載する行為) メールマガジン機能ではだめなんでしょうか?

souta_n
質問者

お礼

おっしゃるとおりです。 ですから、質問を上げているのです。 ちなみに、無差別に大量スパムメールをしようという訳ではありません。 >ご利用前にローカル環境で十分にテストして下さい。 Sendmailってローカルで動作確認しづらいのです。 ローカルコンピューターにSendmailインストールしようと思うと10万円くらいソフト料がいるんですよね。あれフリーソフトじゃないんですよ。 >メールマガジン機能ではだめなんでしょうか? だめっす。 この質問で、有る程度の回答を得られなければ、BCCで、メアド;メアド;メアド;・・・というようにするしかないかなぁ~・・・とも思っています。 それなら、最大4096までしか送れないからおのず。サーバー負荷は制限される訳だし・・・

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

実際の負荷は運用している環境次第で変わるものですから、一般論をここで尋ねるよりも、lolipopに問い合わせをされるのがよろしいかと思います。

souta_n
質問者

お礼

なるほど、その通りなんですが、lolipop側が、自作CGIは使用可能ですが、自作CGIに対してのご質問は受付けかねます・・・というスタンスなんですよね。

関連するQ&A