ASP.NET Web フォームを使用していますが、
ユーザーがページを送信すると、メールが多くの人に送信され、ポストバックが遅くなります。
ページのリロードを遅くせずにメールを送信する最良の方法は何ですか?
ありがとう
System.Net.Mail.SmtpClientクラスを使用して、SendAsync()メソッドを使用して電子メールを送信できます。
var smtpClient = new SmtpClient();
var message = new MailMessage(fromAddress, toAddress, subject, body);
smtpClient.SendCompleted += new SendCompletedEventHandler(OnSendCompletedCallback);
smtpClient.SendAsync(message, null); // Null Or pass a user token to be send when the send is complete
非同期送信が完了した後に追加の実行を処理する必要がある場合は、SmtpClientのSendCompletedイベントをサブスクライブすることもできます。
private void OnSendCompletedCallback(object sender, AsyncCompletedEventArgs e)
{
// Handle the callback if you need to do anything after the email is sent.
}
こちらがMSDNのドキュメントへのリンクです。
非常に小規模な Web サイトを構築している場合を除き、ほとんどの場合、別の Windows サービスからメールを送信するのが最善であることがわかりました。
たとえば、Web フロントエンドは、送信されるメールをデータベースに記録します。これには、 sended folder、outboxなども作成できるという優れた副作用があります。Windowsサービスはメール テーブルをポーリングし、実際の送信を行います。
メールを送信すると、多くの例外が発生する可能性があり、遅くなる可能性があり、タイムアウトする可能性があり、ホスト プロセスがリープされる可能性があります。バックグラウンドでメールを処理することは、多くの状況で非常に理にかなっています。
Windows サービスの詳細については、こちらをご覧ください。