C# SmtpException:发送邮件失败
我正在开发一个ASP.NETCore2.0Web应用程序,我想在其中发送电子邮件。但当我运行我的方法时(我在web上的不同教程中看到),它会超时: 处理请求时发生未处理的异常。 SmtpException:操作已超时 System.Net.Mail.SmtpClient.Send(MailMessage) 我找不出是怎么回事 谢谢你的帮助 编辑:控制台测试崩溃C# SmtpException:发送邮件失败,c#,asp.net,email,smtp,asp.net-core-2.0,C#,Asp.net,Email,Smtp,Asp.net Core 2.0,我正在开发一个ASP.NETCore2.0Web应用程序,我想在其中发送电子邮件。但当我运行我的方法时(我在web上的不同教程中看到),它会超时: 处理请求时发生未处理的异常。 SmtpException:操作已超时 System.Net.Mail.SmtpClient.Send(MailMessage) 我找不出是怎么回事 谢谢你的帮助 编辑:控制台测试崩溃 Unhandled Exception: System.Net.Mail.SmtpException: Failure sending
Unhandled Exception: System.Net.Mail.SmtpException: Failure sending mail. ---> System.Net.Internals.SocketExceptionFactory+ExtendedSocketException
at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress)
at System.Net.Sockets.Socket.Connect(EndPoint remoteEP)
at System.Net.Sockets.TcpClient.Connect(IPEndPoint remoteEP)
at System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Net.Sockets.TcpClient.Connect(String hostname, Int32 port)
at System.Net.Mail.SmtpConnection.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpTransport.GetConnection(String host, Int32 port)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
--- End of inner exception stack trace ---
at System.Net.Mail.SmtpClient.Send(MailMessage message)
at ConsoleApp2.Program.Main(String[] args)
编辑[已解决]:
必须设置一个deliveryMethod,如下所示:
client.DeliveryMethod = SmtpDeliveryMethod.Network;
完整代码,如果它可以帮助任何人:
static void MailSender()
{
string address = "example@gmail.com";
string password = "gmailpassword";
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(address, password);
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(address);
mailMessage.To.Add(anyone@anything.com);
mailMessage.Body = "test";
mailMessage.Subject = "subject";
client.Send(mailMessage);
}
请检查这个@VikasLalkiya:OP已经在这样做了。您将超时设置为3秒。您是否可以想象,为
smtp.gmail.com
执行DNS查找、连接并发送电子邮件可能需要3秒以上的时间?您可能应该更仔细地考虑合理的超时时间应该是多少。您希望它足够长,以便在正常情况下通过电子邮件,但不要太长,如果无法访问该服务,它将占用您的代码非常长的时间。即使发现防火墙之类的东西正在阻止连接,此评论仍然有效。看起来客户端无法访问服务器。也许是防火墙?@mason我真是太傻了,但这并没有导致内部服务器错误。请检查这个@VikasLalkiya:OP已经在这么做了。你将超时设置为3秒。您是否可以想象,为smtp.gmail.com
执行DNS查找、连接并发送电子邮件可能需要3秒以上的时间?您可能应该更仔细地考虑合理的超时时间应该是多少。您希望它足够长,以便在正常情况下通过电子邮件,但不要太长,如果无法访问该服务,它将占用您的代码非常长的时间。即使发现防火墙之类的东西正在阻止连接,此评论仍然有效。看起来客户端无法访问服务器。也许是防火墙?@mason我真是太傻了,但这并没有导致内部服务器错误
client.DeliveryMethod = SmtpDeliveryMethod.Network;
static void MailSender()
{
string address = "example@gmail.com";
string password = "gmailpassword";
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential(address, password);
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
MailMessage mailMessage = new MailMessage();
mailMessage.From = new MailAddress(address);
mailMessage.To.Add(anyone@anything.com);
mailMessage.Body = "test";
mailMessage.Subject = "subject";
client.Send(mailMessage);
}