.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