ページが送信プロセスを完了するまでユーザーを待たせたくないので、ASP.NET 3.5 で SendAsync を使用することを考えています。しかし、デバッグ後、メインスレッドがまだ待機していることがわかりました。
Main: メール送信機能を呼び出す... mailSend: 構成中.... mailSend: 間違ったポートを設定しています.... mailSend: 今すぐ送信を試みます.... mailSend: 行末 Main: メール機能呼び出し終了。 メイン:処理完了! mailComp: メールの送信に失敗しました。5 秒後に再試行します... mailComp: 再試行しています... mailComp: 送信成功! mailComp: 行末
ここで、間違ったポート設定を配置したため、最初の電子メールが失敗し、2 回目に成功するかどうかをテストします。正しいポートを使用しても、ページは引き続き待機します。mailComp 関数が終了して初めて、ページが最終的に投稿されます。これはSendAsynの制限ですか?
そして、ここにいくつかのコードがありますが、これが役立つかどうかはわかりません.
protected void btnReset_Click(オブジェクト送信者, EventArgs e) { 試す { DataContext db = 新しい DataContext(); var query = db.Fish の u から どこで u.Username == txtUsername.Text & u.Email == txtEmail.Text 新しい { u.Username, u.Email } を選択します。 if (query.Count() != 0) { ユーザー user = new User(); 文字列トークン = user.requestPasswordReset(txtUsername.Text); 文字列 URL = Request.Url.AbsoluteUri.ToString() + "?token=" + トークン; String body = "パスワードをリセットしています\n" + URL + "\n \n "; untilty.SendEmail(txtEmail.Text, "パスワードの再設定", body); litTitle.Text = "メッセージが送信されました!"; litInfo.Text = "詳細については、数分後に記載された電子メールを確認してください。"; viewMode(偽、偽); } そうしないと { litCannotFindUserWithEmail.Visible = true; } } キャッチ(例外例) { Debug.Write("Main: Exception: " + ex.ToString()); litInfo.Text = "現在、技術的な問題が発生しています。しばらくしてからもう一度お試しください。問題が解決しない場合は、905344525 までお電話ください"; } } /// public static class ユーティリティ /// public static void SendEmail(文字列の受信者、文字列の件名、文字列の本文) { MailMessage メッセージ = 新しい MailMessage(); message.To.Add(新しいメールアドレス(受信者)); message.From = new MailAddress(fromaddress, "Basadur Profile Web サイト"); message.Subject = 件名; message.Body = 本文; メッセージを送る); } private static void Send(MailMessage msg) { SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.gmail.com"; smtp.Credentials = new System.Net.NetworkCredential(fromaddress, mailpassword); smtp.EnableSsl = true; Debug.WriteLine("mailSend: 間違ったポートを設定しています...."); smtp.Port = 5872; //不正なポート smtp.SendCompleted += 新しい SendCompletedEventHandler(smtp_SendCompleted); smtp.SendAsync(メッセージ、メッセージ); } static void smtp_SendCompleted(オブジェクト送信者、System.ComponentModel.AsyncCompletedEventArgs e) { var msg = (MailMessage)e.UserState; if (e.Error != null) { System.Threading.Thread.Sleep(1000 * 5); 試す { SmtpClient smtp = new SmtpClient(); smtp.Host = "smtp.gmail.com"; smtp.Credentials = new System.Net.NetworkCredential(fromaddress, mailpassword); smtp.EnableSsl = true; smtp.Port = 587; smtp.Send(メッセージ); } キャッチ(例外例) { Debug.WriteLine("mailComp: 2度目の失敗で諦めました。"); } } }