Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 使用System.Net.Mail通过谷歌应用发送电子邮件超时_Asp.net_Email_Gmail_Smtpclient - Fatal编程技术网

Asp.net 使用System.Net.Mail通过谷歌应用发送电子邮件超时

Asp.net 使用System.Net.Mail通过谷歌应用发送电子邮件超时,asp.net,email,gmail,smtpclient,Asp.net,Email,Gmail,Smtpclient,我有一个ASP.NET 4.0 web应用程序,人力资源团队使用它向员工发送调查。由于我们使用的是谷歌应用程序,我试图通过谷歌应用程序帐户发送这些调查电子邮件 我使用以下设置发送电子邮件 Host - smtp.gmail.com Port - 587 EnableSsl=true using (SmtpClient smtp = new SmtpClient()) { smtp.Timeout = 0;

我有一个ASP.NET 4.0 web应用程序,人力资源团队使用它向员工发送调查。由于我们使用的是谷歌应用程序,我试图通过谷歌应用程序帐户发送这些调查电子邮件

我使用以下设置发送电子邮件

Host - smtp.gmail.com
Port - 587
EnableSsl=true
using (SmtpClient smtp = new SmtpClient())
                {
                    smtp.Timeout = 0;
                    smtp.Send(message);
                }
还有我的用户名和密码

这是发送电子邮件的代码

Host - smtp.gmail.com
Port - 587
EnableSsl=true
using (SmtpClient smtp = new SmtpClient())
                {
                    smtp.Timeout = 0;
                    smtp.Send(message);
                }
设置位于web.config中,并从中读取

现在是我的问题

人力资源团队选择多个用户发送调查。他们可以一次只选择一个或最多100个发送调查。由于每个调查链接必须是不同的,我迭代了用户列表并通过电子邮件发送给他们

现在,在应用程序最多发送12封电子邮件之后,它就不再发送了。它试图发送的下一封电子邮件会抛出一个错误

Message = The operation has timed out.
Status Code =GeneralFailure
Stack Trace =   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at ABC.Business.Mail.SendMail(MailMessage message, String& errorMessage)
然后,如果我再次重试,它将抛出一个错误

Message = Failure sending mail.
Status Code =GeneralFailure
Stack Trace =   at System.Net.Mail.SmtpClient.Send(MailMessage message)
   at ABC.Business.Mail.SendMail(MailMessage message, String& errorMessage)
如果它达到这种状态,唯一的出路是重新启动IIS。如果我重新启动IIS,它将在接下来的12个月内再次正常工作


可能是什么问题?请帮助。

您不应该将超时设置为零


它的默认值为10000ms(100秒),请至少保持该值。

克里斯,超时使ASP.NET应用程序等待请求执行,然后自动关闭。所以,如果您将timeOut设置为零,ASP.NET将不会等待请求执行,并且会在操作超时时抛出错误

超时时间应至少为180秒


谢谢。

System.Net.Mail只支持“显式SSL”。

显式SSL

System.Net.Mail仅支持“显式SSL”。显式SSL在端口25上以未加密方式启动,然后发出STARTDLS并切换到加密连接。见RFC 2228

显式SLL类似于:连接25->StartTLS(开始加密)->验证->发送数据

如果SMTP服务器从一开始就需要SSL/TLS连接,那么这将不起作用

隐式SSL

无法在System.Net.Mail中使用隐式SSL(SMTPS)。隐式SSL将使整个连接包装在SSL层中。将使用特定端口(端口465是通用的)。没有涵盖隐式SSL的正式RFC

隐式SLL类似于:启动SSL(启动加密)->连接->身份验证->发送数据

这不是一个bug,而是一个功能请求。SMTP有两种类型的SSL身份验证,我们只支持一种(按设计)——显式SSL。

演示代码:

*

protectedvoid Btn\u SendMail\u单击(对象发送者,事件参数e)
{
尝试
{
var fromAddress=”xyz@gmail.com";
var toAddress=”abc@gmail.com";
常量字符串fromPassword=“xxxxxxxx”;
string subject=“发送演示”;
string body=“From:”+txtFrom.Text+“\n”;
var smtp=new System.Net.Mail.SmtpClient();
{
smtp.Host=“smtp.gmail.com”;
smtp.Port=25;
smtp.EnableSsl=true;
smtp.Credentials=新的网络凭据(fromAddress,fromPassword);
}
smtp.Send(fromAddress、toAddress、subject、body);
响应。写入(“警报(‘发送’)”);
}
捕获(例外情况除外)
{            
txtBody.Text=ex.Message;
}
}
*


这段代码没有任何错误

我认为将超时设置为0意味着无限等待?我错了吗?