小编Osa*_*ada的帖子

如果指定了错误的端口,则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服务器的详细信息,我不希望整个应用程序挂起,以防输入错误的细节.

谢谢,

在此输入图像描述

c# asp.net smtpclient

9
推荐指数
1
解决办法
3222
查看次数

SQL 存储过程参数没有长度

我可以varchar在我的存储过程中使用参数而不声明它的长度吗?例如,我想如下声明我的存储过程:

CREATE PROCEDURE [TEST] 
    @Domain varchar,
    @Numbers int
AS
 .....
Run Code Online (Sandbox Code Playgroud)

如果存储过程可以自动检测参数长度,对我来说就容易多了,在这种情况下,如果我更改了表中的列长度,我将不需要去更新所有使用此列的存储过程。

谢谢,

sql stored-procedures

2
推荐指数
1
解决办法
1706
查看次数

标签 统计

asp.net ×1

c# ×1

smtpclient ×1

sql ×1

stored-procedures ×1