8

私は、データベースから選択される大量の電子メールを学生に送信する必要があるアプリケーションを作成しています(各電子メールは、名前、学習コースなどを含む範囲でパーソナライズされます...したがって、一度に1つずつ送信されます)。

SmtpClientでこのループを実行することはできますが、送信しようとしている番号では、最終的にタイムアウトの問題が発生したり、マシンリソースが不足しているためにスレッドが強制終了されたりするのではないかと心配しています。

この時点で、私はこれを処理するためのより良い方法の提案を探しています。または、SmtpClientをループすることが問題のない解決策である場合、上記の投稿を防ぐためにどのように処理する必要がありますか。

Webサービスはより良い代替手段でしょうか?

アドバイスしてください、TIA

4

5 に答える 5

11

私の提案は、これをバッチ処理することです。ASP.NET コードを実行して 2 万通の電子メールを作成して送信しようとしないでください。タイムアウトやパフォーマンスの問題が発生する可能性があります。代わりに、テーブルに受信者、件名、本文を入力し、Windows サービスからバッチ プロセスを開始します。このようにして、リクエストが返されるまで Web ページを待機させる代わりに、ラグを管理できる方法でコードが実行されます。

于 2010-04-12T17:12:49.653 に答える
6

わかりました、まず - これは大したことではありません。私は 50.000 通以上のメールを処理してきました

電子メールを FOLDER - ディレクトリに書き込むようにします。次に、インストール可能なローカル SMTP サービスを使用して、フォルダーをピックアップ ディレクトリとして指定します。これにより、少なくともその間に適切なバッファーがあることが保証されます (つまり、その時点で電子メールが送信されていない間に、asp.net 側を終了できます)。

于 2010-04-12T17:11:09.020 に答える
2

SQL Server自体が提供するデータベース メールツールの使用についてはどうですか。まだasp.netを使用できますが、電子メールはSQL Serverによって送信され、ストアドプロシージャを呼び出してSQL Serverに任せるだけです。

多大な労力を費やす必要がない限り、最適化やキューの問題がないため、バッチオプションはお勧めしません。

データベース メール ツールには、キューと優先度のオプションも用意されています。問題が発生した場合、電子メールは再びキューに入れられ、後で送信されますが、他の電子メールは引き続き送信されます。

これは、SQL Server 2008 ではデータベースメール、以前のバージョンではSQL Mailと呼ばれています。

詳細については、以下のリンクを確認してください。

于 2010-04-12T22:17:16.167 に答える
0

タイマーで JavaScript を使用して、タイムアウトしない小さなチャンクでメールを送信するスクリプトを要求できます。次に、ブラウザからスクリプトを呼び出します。プログレスバー、認証などを追加します。

于 2010-04-12T17:11:43.013 に答える
0

Web サービスは必要ありませんが、電子メールをキュー (おそらく DB の「Email_Queue」テーブル) にバッチ処理する方法が必要です。次に、サーバー上で実行されている Windows サービスは、SMTPClient に送信される時点で適切なチャンクで先入れ先出し方式でキューを読み取り、処理されるアイテムをキューから削除できます。メール サーバーのチャンク サイズと遅延がどの程度になるかを判断するには、おそらくいくつかの測定を実行する必要があります。

于 2010-04-12T17:17:32.420 に答える