Osa*_*ada 9 c# asp.net smtpclient
我试图使用端口465和主机"smtp.gmail.com"在我的Asp.Net C#应用程序中发送电子邮件,但整个应用程序挂起(继续加载).调试时,它停留在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();
Run Code Online (Sandbox Code Playgroud)
我尝试了SendAsync并减少了超时间隔,但这并没有解决问题.我认为问题是smtp.gmail.com已达到,但没有正确响应端口465,这就是为什么方法被卡住了.
我需要避免这种行为,因为我的应用程序允许动态设置smtp服务器的详细信息,我不希望整个应用程序挂起,以防输入错误的细节.
谢谢,

找到这个答案以防有人到达这里
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IAsyncResult result = socket.BeginConnect("192.168.1.180", 25, null, null);
// Two second timeout
bool success = result.AsyncWaitHandle.WaitOne(2000, true);
if (!success) {
socket.Close();
throw new ApplicationException("Failed to connect server.");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3222 次 |
| 最近记录: |