我试图从c# windows应用程序发送电子邮件。我使用的是smtp.office365.com。我收到以下错误消息:
无法从传输连接读取数据:远程主机强制关闭了现有连接。
我是在Windows Server 2012上做的。
下面是我正在使用的代码:
try
{
smtp= new SmtpClient("smtp.office365.com");
message = new MailMessage();
smtp.UseDefaultCredentials = false;
smtp.Credentials = new NetworkCredential("office365mailid", "xxxx");
smtp.DeliveryMethod = SmtpDeliveryMethod.Network;
smtp.Port = 587;
smtp.EnableSsl = true;
message.To.Add(new MailAddress("toaddress"));
message.Subject = "Test mail";
message.From = new MailAddress("my office 365 mailbox address");
message.Body = "Test";
smtp.Send(message);
}
catch (Exception ex)
{
}
finally
{
message.Dispose();
smtp.Dispose();
}
1条答案
按热度按时间slwdgvem1#
通常情况下,与SMTP服务器的连接已经建立,但由于几种可能的原因而被中断。
以下是一些原因:
1.如果您从ISP提供的IP地址呼叫SMTP服务器,您可能处于公共PBL(策略阻止列表)中,并且如果呼叫来自这样的IP地址,许多SMPT服务器会主动断开连接。这是防止来自家庭计算机的垃圾邮件的常见做法。
您可以在这里看到更多:策略阻止列表https://www.spamhaus.org/pbl/
1.发送电子邮件的主机必须正确设置“DNS PTR资源记录”。对于“message.From”,电子邮件的主机必须与DNS PTR资源记录中的主机相同,否则某些SMTP服务器将终止连接或发出554错误代码。“如何修复554无效PTR资源记录错误?”https://hoststud.com/resources/how-to-fix-the-554-invalid-ptr-resource-record-error.670/
1.“我们不建议您使用SmtpClient类进行新的开发,因为SmtpClient不支持许多现代协议。请改用MailKit或其他库。”https://learn.microsoft.com/en-us/dotnet/api/system.net.mail.smtpclient?view=net-7.0#remarks
邮箱:https://github.com/jstedfast/MailKit