ホスト「smtp.gmail.com」でポート465を使用してAsp.NetC#アプリケーションで電子メールを送信しようとしましたが、アプリケーション全体がハングします(ロードを続けます)。デバッグ時に、SmtpClient.Send(msg)でスタックします。
指定されたクレデンシャルに関係なく、キャッチする例外やタイムアウトエラーはスローされません。ページへのアクセスを回復するには、ページを閉じるか更新する必要があります。
代わりにポート587を設定すると、すべてが正常に機能し、SmtpClient.Sendが応答して電子メールを送信するか、操作のタイムアウトや資格情報に基づく電子メールの送信の失敗などの適切な例外を返します。
デモ用に以下のコードを簡略化しました。
var smtp = new SmtpClient
{
Host = "smtp.gmail.com",
Port = 465,
EnableSsl = true,
Timeout = 200, // or any value it doesn't solve the problem
DeliveryMethod = SmtpDeliveryMethod.Network,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("name@gmail.com", "password")
};
var msg = new MailMessage("name@gmail.com", "name@gmail.com", "Any subject", "Any body");
smtp.Send(msg); // stuck here
smtp.Dispose(); // never reached
msg.Dispose();
SendAsyncを試し、タイムアウト間隔を短くしましたが、問題は解決しませんでした。問題は、smtp.gmail.comに到達したが、ポート465に正しく応答しなかったため、メソッドがスタックしたことだと思います。
私のアプリケーションはSMTPサーバーの詳細の動的設定を許可し、間違った詳細が入力された場合にアプリケーション全体がハングしたくないので、このような動作を回避する必要があります。
ありがとうございました、