メールマガジンのシステムを、ASPにて製作しております。一度に送信する件数は、5,000件ぐらいを考えているのですが、送信途中ブラウザを閉じられても、バックグラウンドで送信できる方法はないでしょうか?

BASP21のFlushMailの機能を利用すると、できそうな感じがするのですが、詳しく説明されたサイトを見つけることができません。
(※1件、1件送信内容が微妙に違います。)

環境:Win2000 server IIS(5.0)、ASP、SQL Server

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/06/27 13:18:06
  • 終了:--

回答(3件)

id:Chaborin No.1

ちゃぼりん回答回数189ベストアンサー獲得回数72005/06/27 13:41:49

ポイント20pt

基本的に、送信途中でブラウザを閉じられても、ASPであればどの命令を使ってもバックグラウンドで実行してくれますよ。


ASPの実行順序は下記のような感じなのですが、

---

(1)ブラウザで送信ボタンを押し、ブラウザーがASPサーバに送信する

(2)サーバ側で処理をする(ここでメールが送信される)

(3)結果のHTMLをブラウザに返す

---

送れないケースは、(1)が完了しない時だけです。つまり、サーバ側にPOST(またはGET)が完了した時点で、あとはブラウザを閉じようが何をしようが、サーバはきっちり仕事をしてくれる、ということです。


ただ、5000件をサーバサイドで送信するのはあまり良いとは思えません。

できるならば、ASPでは送信を予約しておき(つまりDBに送信予約テーブルを作成してそこに送信予定の情報をためこんでおいて)、あとで時間稼働のバッチプログラムから送信させるのが設計的には良いと思います。

http://windows.microsoft.com/windows2000/ja/server/iis/default.a...

Microsoft Windows 2000 Server ドキュメント

おそらく5000件とのことで、もしそのままASP上で一度に送信させようとすると、(2)の処理がものすごく長くなり、ASP側のスクリプトタイムアウトに抵触すると思います。

メール1通送るのには(同期送信だと)最低でも0.5秒程度かかるので、5000通だと2500秒=45分程度はかかるはずです...!!

ちなみにscripttimeout自体のデフォルト値は90ですので、せいぜい200通弱程度送信したところでタイムオーバーです。


このserver.scripttimeoutをいじれば、この時間は操作可能ですが、先ほども書いたように、なるべくサーバにバッチプログラムを設置して実行することを(強く)お薦めします。

id:ilovegarbage No.2

ilovegarbage回答回数38ベストアンサー獲得回数02005/06/28 21:50:00

ポイント20pt

http://www.atmarkit.co.jp/fwin2k/win2ktips/582schtasks/schtasks....

@IT:Windows TIPS -- Knowledge:タスク・スケジューラをコマンド・プロンプトから制御する

ASPでは配信リクエストを受け付けてファイルやDBにキューとして残すだけにしておき、バッチ(タスクスケジューラ)で配信を実行するのが良いと思います。

タスクはschtasksコマンドで作ると楽ですよ。

バッチの起動間隔を狭める場合は、同じキューを同時に実行してしまわないよう、プログラムの先頭でロックファイルを作っておき、終了してロックファイルが消されるまでは後から実行されたプログラムが動作しないようにしないと何通も送信されますのでご注意を。

id:sho1008 No.3

sho1008回答回数23ベストアンサー獲得回数02005/06/29 00:47:32

ポイント20pt

送信件数、宛先、内容、結果をSQLServerのDB内に持ち、

ブラウザ→BASP21の呼び出しをバッチ形式の

非同期で呼び出すのはどうでしょうか?

VBScriptのRunメソッドだったかexecメソッドだったかは

忘れてしまいましたが、非同期処理が可能です。

ですので、「送信ボタン」からはバッチ呼び出しだけにしてしまい、

非同期ながらASPの方からDBへアクセスし、

送信状況をブラウザにリアルタイム表示してあげれば良いかと思います。

それならば途中で閉じられても問題ないですよね!?

その代わり送信エラーのものに関しては

ログ監視や画面に表示させるなどの

仕組みが必要かと思います。

参考にしてみて下さい。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません