【发布时间】:2019-08-08 19:14:11
【问题描述】:
我从 ASP.NET (4.0) 网站发送电子邮件:
SmtpClient mySMTPClient = new SmtpClient();
mySMTPClient.UseDefaultCredentials = false;
mySMTPClient.Host = "email.privateemail.com";
mySMTPClient.Port = 465; //I also tried 587 and none of them
mySMTPClient.Credentials = new System.Net.NetworkCredential("contact@xxxxxx.com", "xxxxxxxxxx");
mySMTPClient.EnableSsl = true;
mySMTPClient.DeliveryMethod = SmtpDeliveryMethod.Network;
mySMTPClient.Send(email);
我每天发送十几封电子邮件,而不是批量或循环发送。只有大约一半被发送。另一个失败并出现错误:
ERROR MESSAGE: Failure sending mail.
INNER EXCEPTION: System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host. ---> System.Net.Sockets.SocketException: An existing connection was forcibly closed by the remote host
at System.Net.Sockets.Socket.Receive(Byte[] buffer, Int32 offset, Int32 size, SocketFlags socketFlags)
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)
at System.Net.DelegatedStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.BufferedReadStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.Net.Mail.SmtpReplyReaderFactory.ReadLines(SmtpReplyReader caller, Boolean oneLine)
at System.Net.Mail.SmtpReplyReaderFactory.ReadLine(SmtpReplyReader caller)
at System.Net.Mail.SmtpConnection.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpTransport.GetConnection(ServicePoint servicePoint)
at System.Net.Mail.SmtpClient.GetConnection()
at System.Net.Mail.SmtpClient.Send(MailMessage message)
失败的电子邮件是随机的。我没有模式。
Windows 服务器 2008 SP2 内部版本 6002 防火墙 PfSense - 工程师说规则配置正确,否则所有电子邮件都会失败。 第三部分电子邮件提供商:他们说一切都已正确配置,并且无论如何他们都无法进行任何修改。
我不是网络工程师,也没有。我的问题是,我该怎么做才能找到根本原因以便解决它?
到目前为止,我尝试了 Process Monitor,但它对我没有帮助(或者我不知道如何查看)。
我找到了几篇关于这个问题的文章,但目前没有一篇文章对我有帮助,因为它们的解决方案不适用于我的上下文(我尝试了一些但没有成功)。
谢谢
【问题讨论】:
-
根据异常消息,看起来邮件服务器有问题,而不是您的应用程序。在尝试处理要发送的电子邮件时,它看起来可能会崩溃。
-
两种常见的错误原因 1) 发送邮箱已满 2) 邮箱账号和发件人地址(或凭证)不一致。 Windows 仅允许当前用户使用网络凭据(除非您以管理员身份运行)。但是,如果您以管理员身份运行,则发件人地址仍然与凭据匹配。此外,电子邮件用户必须在运行代码的机器上拥有一个帐户。凭据是从在机器上拥有帐户的用户那里获得的。
-
@SeM 我红了那篇文章。该解决方案对我不起作用。我已经拥有 TLS 1.2 和强大的加密技术。问题出在实施 TLS 1.2 之前,并且 TLS 1.2 没有改善。 @Martin Costello 这就是我告诉运行私人电子邮件的 Namecheap 的话,但他们说一切都很好,他们不会做任何事情。我会尝试从 Gmail 发送所有电子邮件,看看它是如何工作的。好主意。 @jdweng 凭据应该没问题,因为错误只是随机的
-
只要确保问题是随机的,而不是其他因素。我会尝试发送完全相同的电子邮件 100 次,看看它失败的次数。
标签: c# .net sockets email smtp