.NET 应用程序中的 Office 365 Exchange SMTP 间歇性身份验证失败
Office 365 Exchange SMTP intermittent authentication failure in .NET application
我们有许多 C# (.net 4) 应用程序可以通过我们的 Office 365 Exchange 帐户发送电子邮件。这在 90% 的时间里都工作得很好。但偶尔我们会收到以下错误:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during 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 资深人士认为将它放在不同的社区会更好,我会洗耳恭听。我自己也是新来的。
如有任何想法,我们将不胜感激!
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);
};
}
我就此打开了 Microsoft 365 支持的案例,他们告诉我,我不是唯一遇到此问题的人。他们让我尝试在问题发生时捕获 SMTP 日志,但我们从未发现任何有用的东西。 MS 技术人员还表示,他将尝试在后端的邮件服务器上升级一些东西(不确定具体是什么)。在他这样做之后,问题仍然存在,但似乎不那么频繁了。
后来越来越少了,现在大概5天没见了。所以,我不知道这是来自我的 MS 技术所做的任何具体事情,还是只是一个更大的问题最终得到解决。但就目前而言,问题似乎已经消失,而不是通过我们这边的任何改变。
在电子邮件应用程序中正确添加 SMTP 详细信息后
- 您需要转到 > Microsoft 365 管理中心 (https://admin.microsoft.com) > 活跃用户
- Select 您希望通过 SMTP 服务器进行身份验证的用户
- Select 邮件选项卡(见图 1)
- 在电子邮件应用下,Select> 管理电子邮件应用
- 确保选中 "Authenticated SMTP" 复选框(见图 2)
- 并保存
之后您的电子邮件应该可以使用了。
此处为图片示例
Image 1
Image 2
我们有许多 C# (.net 4) 应用程序可以通过我们的 Office 365 Exchange 帐户发送电子邮件。这在 90% 的时间里都工作得很好。但偶尔我们会收到以下错误:
The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 SMTP; Client was not authenticated to send anonymous mail during 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 资深人士认为将它放在不同的社区会更好,我会洗耳恭听。我自己也是新来的。
如有任何想法,我们将不胜感激!
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);
};
}
我就此打开了 Microsoft 365 支持的案例,他们告诉我,我不是唯一遇到此问题的人。他们让我尝试在问题发生时捕获 SMTP 日志,但我们从未发现任何有用的东西。 MS 技术人员还表示,他将尝试在后端的邮件服务器上升级一些东西(不确定具体是什么)。在他这样做之后,问题仍然存在,但似乎不那么频繁了。
后来越来越少了,现在大概5天没见了。所以,我不知道这是来自我的 MS 技术所做的任何具体事情,还是只是一个更大的问题最终得到解决。但就目前而言,问题似乎已经消失,而不是通过我们这边的任何改变。
在电子邮件应用程序中正确添加 SMTP 详细信息后
- 您需要转到 > Microsoft 365 管理中心 (https://admin.microsoft.com) > 活跃用户
- Select 您希望通过 SMTP 服务器进行身份验证的用户
- Select 邮件选项卡(见图 1)
- 在电子邮件应用下,Select> 管理电子邮件应用
- 确保选中 "Authenticated SMTP" 复选框(见图 2)
- 并保存
之后您的电子邮件应该可以使用了。
此处为图片示例
Image 1
Image 2