none
多数のメールの一斉送信は? RRS feed

  • 質問

  •  Web Application を運用する場合に、System.Web.Mail クラスの SmtpMail.Send(,,) メソッドをあちこちのポイントに配置して、エラーなどのイベント発生時に簡単なメールが、開発者の元へ届くようにして、便利に使ってきました。

     このメソッドですが、1000件程度のメールを一斉送信する場合などに使った場合、処理速度とか、筐体内のシステムへの負荷の程度が気になります。Windows Server 2003 + .Net Framework 1.1 上に Web Application として簡単なメルマガを開発しました。メール送信の核心部分の Code は for() {} で単に必要なだけ SmtpMail.Send(,,) メソッドを Loop させているのみです。メッセージ本文は、せいぜい数百文字程度のテキストに限られます。配信を担当する MTA は、同一 LAN 内の別筐体の Linux 上の qmal です。

     この1年、ユーザー数=20人程度で、試験運用して問題なく動いてきたのですが、そろそと実稼動させることになり、この Web Application を別筐体に収容したほうがよいのか、あるいは、SQL Server ( 実は、MSDE2000 Rel3a )と同じ筐体内で運用可能なのか、計りかねているところです。1000件程度ののメールの発信で、MSDE2000 が数分も応答無しになる、LAN 内のクライアントから見てフリーズ状態になる、というような事態は許容できません。皆様の御経験や参考となるページを御紹介下さい。

     

    2007年2月3日 19:28

すべての返信

  • この手の処理は非同期やるべきです。

    バッチをキックするでもいいですし、メール送信用アプリケーションを作成するのもよしですが、同期でやっては大変な目に会います。
    クライアントコールバックと JavaScript の Timer を使ってもいいですしね。
    あと AJAX もいいと思う。

    まぁ、たかだか 1,000 通なんで、該当の ASP.NET の応答が悪くなるぐらいで済むでしょうが、あんまり勧められたものじゃないです。

    とあるサイトで 10 万通、IIS の SMTP で送信したことがありますが、リモートから AT コマンドの設定と呼び出される VBScript を作成して、3 台で負荷分散しながら送信したことがあります。しかし、IIS の SMTP は非常に遅いため、送信完了が 6 時間後だったりしました。

    ともかく同期で処理をしない工夫が必要だと思います。
    あと、MSDE 2000 の話をされていましたが、テストで負荷試験をして、筐体を変えるかどうか判断してください。
    メール送信以外でも負荷がかかる可能性があると思いますので。

    2007年2月3日 20:53
  • 非同期アプリケーション、、、.Net の初歩の初歩として、Microsoft の学習サイト Step7 とかそういうページで音声付で紹介されていました。スレッド処理が Delegate のおかげで、えらい簡単になっているんですね。これなら私も使えるかも。ちょっと嬉しくなりました。ありがとうございました。
    2007年2月4日 8:25
  • ASP.NET でやるべき方法じゃないですよ。
    UI が固まりますよ、処理が終わるまで。
    私は AJAX を進めます。
    2007年2月4日 9:05