代码之家  ›  专栏  ›  技术社区  ›  Benjamin

.NET应用程序中的Office 365 Exchange SMTP间歇性身份验证失败

  •  1
  • Benjamin  · 技术社区  · 9 年前

    我们有许多通过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。(注意:如果删除凭据行或EnableSSL行,则每次都会出现此错误)

    编辑:作为测试,我做了一个简单的应用程序,每分钟给我发一次电子邮件。我通常会在一封邮件失败之前收到12到25封成功的邮件。然后它会在12-25分钟内恢复正常,然后再次爆炸。

    编辑:由于这个问题非常零星,并且涉及到从365 SMTP服务器返回的错误消息,我并不认为这是代码本身的问题。鉴于此,我不确定我是否正确地标记了这个问题,或者SO是否是最好的社区。如果你们中的任何一位Stack Exchange老兵认为这将更好地安置在不同的社区中,我会全神贯注。我自己在这里有点新。

    任何想法都值得赞赏!

    3 回复  |  直到 9 年前
        1
  •  1
  •   Benjamin    9 年前

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

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

        2
  •  0
  •   MethodMan    9 年前
    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);
        };
    }
    
        3
  •  0
  •   Joe King    4 年前
    • 在电子邮件应用程序中正确添加SMTP详细信息后

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

      你的电子邮件应该在那之后生效。

    此处的图像示例

    Image 1

    Image 2