我们有许多通过Office 365 Exchange帐户发送电子邮件的C#(。net 4)应用。这种方法在90%的时间内都能正常工作。但偶尔会出现以下错误:
SMTP服务器需要安全连接,或者客户端未经过身份验证。服务器响应是:5.7.57 SMTP;客户端未通过身份验证,无法在MAIL FROM期间发送匿名邮件。
以下是代码:
private void SendEmail(string strTo, string strFrom, string strMessage, string strSubject, bool htmlFormat = true)
{
System.Net.Mail.MailMessage mail = new System.Net.Mail.MailMessage();
System.Net.Mail.MailAddress mto = new System.Net.Mail.MailAddress(strTo);
System.Net.Mail.MailAddress mfrom = new System.Net.Mail.MailAddress(strFrom);
mail.Subject = strSubject;
mail.From = mfrom;
mail.To.Add(mto);
mail.Body = strMessage;
mail.IsBodyHtml = htmlFormat;
System.Net.Mail.SmtpClient mailClient = new System.Net.Mail.SmtpClient("smtp.office365.com", 587);
mailClient.Timeout = 1000000;
mailClient.EnableSsl = true;
mailClient.UseDefaultCredentials = false;
mailClient.Credentials = new System.Net.NetworkCredential("my@emailaddress.com", "mypassword");
mailClient.Send(mail);
}
我之前在这里看到过有关此错误消息的问题,但我还没有找到任何解释,为什么它可能只发生间歇性。错误消息令人困惑,因为我没有尝试匿名发送,我已经在使用EnableSsl。 (注意:如果我删除了Credentials行或EnableSSL行,那么每次都会出现此错误)
编辑:作为测试,我制作了一个简单的应用程序,每分钟给我发送一次电子邮件。在一次爆炸之前,我通常会收到12到25封成功的电子邮件。然后它会再次恢复到正常状态12-25,再次爆发。编辑:由于问题太零散,并且涉及从365 SMTP服务器返回的错误消息,我真的不认为它是代码本身的问题。鉴于此,我不确定我是否正确地标记了这个问题,或者如果SO甚至是最好的社区。如果你们中的任何一位Stack Exchange资深人士认为这样可以更好地安置在不同的社区中,我会全力以赴。我自己有点新鲜。
任何想法都表示赞赏!
答案 0 :(得分:1)
我打开了一个关于Microsoft 365支持的案例,他们告诉我,我不是唯一遇到此问题的人。当问题发生时,他们让我尝试捕获SMTP日志,但我们从未发现任何非常有用的东西。 MS技术还表示,他将尝试在后端的邮件服务器上升级某些东西(不确定究竟是什么)。在他这样做之后,问题仍在发生,但似乎不那么频繁了。
最终变得越来越不频繁,现在我还没有看到它在大约5天内发生。所以,我不知道这是来自我的MS技术所做的任何具体事情,或者只是一个更大的问题最终得到解决。但就目前而言,这个问题似乎已经消失了,而不是改变我们的任何事情。
答案 1 :(得分:0)
public static void SendEmail(string sTo, string subject, string body)
{
var Port = int.Parse(ConfigurationManager.AppSettings["SmtpPort"]);
using (var client = new SmtpClient(Your EmailHost, Port))
using (var message = new MailMessage()
{
From = new MailAddress(FromEmail),
Subject = subject,
Body = body
})
{
message.To.Add(sTo);
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.Credentials = new NetworkCredential(ConfigurationManager.AppSettings["EmailCredential"],
ConfigurationManager.AppSettings["EmailPassword"]);
client.EnableSsl = true;
client.Send(message);
};
}
答案 2 :(得分:0)
在电子邮件应用程序中正确添加SMTP详细信息之后
之后,您的电子邮件应该可以使用。
此处有图像示例