【问题标题】:Office 365 Exchange SMTP intermittent authentication failure in .NET application.NET 应用程序中的 Office 365 Exchange SMTP 间歇性身份验证失败
【发布时间】:2016-04-17 17:19:57
【问题描述】:

我们有许多通过我们的 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 资深人士认为这会更好地放在不同的社区中,我全都在听。我自己在这里有点新。

感谢任何想法!

【问题讨论】:

  • 我将发布一个你可以使用的方法,或者改变我刚刚测试过的方法
  • 我也面临这个间歇性问题。我会说我们的邮件服务在 99% 的情况下都工作,然后失败并显示相同的错误消息“SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.7.57 SMTP;客户端未通过身份验证发送MAIL FROM 期间的匿名邮件。”您找到解决这个老问题的方法了吗?
  • 还没有。我有一个与 Microsoft 合作的案件。他们说其他人也遇到了间歇性问题。如果我们改为使用本地 IIS 中继与 365 通信,错误似乎消失了。所以这是一种解决方法,但我不想为每个应用程序都使用中继。我目前正致力于在我的 .NET 应用程序中捕获 SMTP 日志,以便为 MS 提供有关问题所在的更多详细信息。

标签: c# .net email smtp office365


【解决方案1】:

我为此提出了 Microsoft 365 支持的案例,他们告诉我不是唯一遇到此问题的人。当问题发生时,他们让我尝试捕获 SMTP 日志,但我们从未发现任何非常有用的东西。 MS 技术人员还表示,他将尝试在后端的邮件服务器上升级一些东西(不确定具体是什么)。在他这样做之后,问题仍然存在,但似乎不那么频繁了。

最终它变得越来越少,现在我在大约 5 天内没有看到它发生。所以,我不知道这是来自我的 MS 技术所做的任何具体事情,或者只是一个更大的问题最终得到了解决。但就目前而言,问题似乎已经消失,而不是通过我们的任何改变。

【讨论】:

    【解决方案2】:
    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);
        };
    }
    

    【讨论】:

    • 感谢@MethodMan,看起来我们的代码几乎相同,只是您包含了DeliveryMethod = SmtpDeliveryMethod.Network; 行。我可以尝试将它添加到我的并让它运行一段时间,看看它是否有所作为。测试很棘手,因为这个问题非常间歇性地发生。
    • 我们的代码在创建邮件消息的方式上略有不同,在构建它时更加简洁。我希望这对你有用。我目前在我们所有的生产环境中一直使用它,从来没有失败过..knock on woodlol
    • DeliveryMethod = SmtpDeliveryMethod.Network; 是默认值,设置它没有任何作用。
    • @jstedfast 无论有没有它都可以工作.. 我刚刚测试过.. SmtpDeliveryMethod.Network 仍然是默认值或不是一个不能总是假设...谢谢
    • 通常我也喜欢明确,但在这种特殊情况下,SmtpClient 默认本地交付的可能性并不大:)
    【解决方案3】:
    • 在您的电子邮件应用程序中正确添加 SMTP 详细信息后

      • 您需要转到 > Microsoft 365 管理中心 (https://admin.microsoft.com) > 活跃用户
      • 选择您希望通过 SMTP 服务器进行身份验证的用户
      • 选择邮件选项卡(见图 1)
      • 在电子邮件应用下,选择> 管理电子邮件应用
      • 确保选中“Authenticated SMTP”复选框(见图 2)
      • 然后保存

      之后您的电子邮件应该可以工作了。

    此处有图片示例

    Image 1

    Image 2

    【讨论】:

      猜你喜欢
      • 2020-08-19
      • 2011-10-09
      • 1970-01-01
      • 2016-11-14
      • 2021-10-13
      • 2020-10-13
      • 2017-07-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多