0

このモジュールには、ユーザーが登録でき、電子メールアドレスを確認する必要があります。

現在、私は.NETを使用して電子メールを送信しました。したがって、レコードを追加した後、emailメソッドを呼び出します。しかし、私が気付いたのは、電子メール機能がタイムアウトエラーを受け取ることがあり、すべての例外をキャッチしたため、このエラーがユーザーに表示されることです。

私が欲しかったのは、バックグラウンドで電子メールを送信することです。メール接続のタイムアウトが発生した場合、電子メール方式では、おそらく1〜2分間電子メールの送信が再試行されます。そして、これを実現するためにSQLメールを使用することを考えています。しかし、それが最善の解決策かどうかはわかりません。

4

2 に答える 2

5

いくつかのオプションがあります。

  1. SQL Serverデータベースメールを使用して、電子メールのキューイングと送信に関する手間のかかる作業を実行します。アプリケーションは、メッセージを作成してデータベースに送信する責任があります。別のSMTPサーバーを介して中継します(SMTPサービスをSQLマシンに直接インストールすることはおそらく良い考えではありません)。

  2. Webアプリケーションから非同期電子メールメソッドを使用しますSmtpMail.SendAsync()。これにより、ユーザーを拘束することなく(またはユーザーと対話することなく)エラーを処理できますが、耐久性はありません。Webプロセスが再起動すると、操作は失われます。

  3. Windowsサービスを使用します。これは、新しい電子メールタスクがないかデータベースを監視するか、タスクを実行する必要があるというメッセージをWebアプリケーションから送信する、単純な別個のアプリケーションになります。

オプション#2を使用SendAsync()すると、実装が最も速くなります。ニーズによっては、それで十分な場合があります。

オプション#1は、それほど多くの労力を必要としないはずです。オプション#3は、受信者リストと電子メールの内容に複雑なビジネスロジックを実装する必要がある場合に非常に役立ちます。オプション#1と#3を組み合わせることも可能です(コメントの@RemusRusanuと私の間の会話を参照してください)。

オプション#1と#3の両方を使用すると、環境がダウンしたり、サービスが再起動したり、エラーが発生したりしても、データが失われたり、メールの送信に失敗したりすることはありません。

于 2012-12-27T05:35:14.727 に答える
0

むしろ、.netアプリケーションでタイムアウトを管理します。トリガーに問題またはタイムアウトがある場合、データがコミットされない可能性があります。むしろ、DBがデータトランザクションを完了できるようにし、.netアプリから状態を確認します。

これに対する決定的な答えがあるとは思いませんが、これが私の好みです。

于 2012-12-27T05:33:24.147 に答える