【问题标题】:5.7.57 SMTP - Client was not authenticated to send anonymous mail during MAIL FROM error5.7.57 SMTP - 在 MAIL FROM 错误期间,客户端未通过身份验证发送匿名邮件
【发布时间】:2015-08-01 07:11:56
【问题描述】:

我必须使用我的网络应用程序发送邮件。鉴于以下代码显示The SMTP server requires a secure connection or the client was not authenticated. The server response was:

5.7.57 SMTP;在 MAIL FROM 期间,客户端未通过身份验证发送匿名邮件。

帮助我找到合适的解决方案。谢谢。

代码:

protected void btnsubmit_Click(object sender, EventArgs e)
 {

   Ticket_MailTableAdapters.tbl_TicketTableAdapter tc;
   tc = new Ticket_MailTableAdapters.tbl_TicketTableAdapter();
   DataTable dt = new DataTable();
   dt = tc.GetEmail(dpl_cate.SelectedValue);
   foreach (DataRow row in dt.Rows)
    {
    string eml = (row["Emp_Email"].ToString());
    var fromAddress = "emailAddress";
    var toAddress = eml;
    const string fromPassword = "*****";
    string body = "Welcome..";
 // smtp settings
    var smtp = new System.Net.Mail.SmtpClient();
       {
         smtp.Host = "smtp.office365.com";
         smtp.Port = 587;
         smtp.EnableSsl = true;

         smtp.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
         smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
         smtp.UseDefaultCredentials = false;
         smtp.Timeout = 600000;
       }
  // Passing values to smtp object
     smtp.Send(fromAddress, toAddress, subject, body);
     }
  } 
 }

【问题讨论】:

  • 为什么不增加超时时间?
  • 您是否对此进行了匿名处理,或者您是否真的尝试使用该登录名通过 office.com 发送?
  • @reshma,你做了什么改变?面临同样的问题。
  • 我已经能够发送带有所示 SMTP 配置的电子邮件,但我移动了 smtp.UseDefaultCredentials = false;在 smtp.Credentials = ... 之前,Kiquenet 写在下面

标签: c# smtp timeout


【解决方案1】:

就我而言,我遵循了以下 3 个步骤,并且成功了。

如果您遇到以下错误之一: 535 5.7.3 认证失败 5.7.57 客户端未通过身份验证发送邮件 您应该检查以下几点:

  1. 在正在使用的许可邮箱上启用客户端 SMTP 提交: 从 Microsoft 365 管理中心,转到 活动用户 并选择用户。 转到邮件标签。 在电子邮件应用部分,选择管理电子邮件应用。 验证已检查(启用)已验证的 SMTP 设置。 选择保存更改。

  2. 在正在使用的许可邮箱上禁用多重身份验证 (MFA): 在 Microsoft 365 管理中心的左侧导航菜单中,选择用户 > 活动用户。 在活动用户的页面上,选择Multi-Factor Authentication。 在 Multi-Factor Authentication 页面上,选择用户并禁用 Multi-Factor Authentication 状态。

  3. 通过将启用安全默认值切换为否来禁用 Azure 安全默认值: 以安全管理员、条件访问管理员或全局管理员身份登录 Azure 门户。 浏览到Azure Active Directory>属性。 选择管理安全默认值。 将启用安全默认值设置为否。 选择保存。

Microsoft Reference Link

【讨论】:

    【解决方案2】:

    我有类似的问题。请阅读此microsoft support article。 特别是本节。

    【讨论】:

      【解决方案3】:

      尝试重置您使用的电子邮件的密码。有类似问题,修改密码后解决。

      【讨论】:

        【解决方案4】:

        您尝试发送电子邮件的帐户的密码可能已过期。只需检查您的密码政策到期日期即可。

        【讨论】:

          【解决方案5】:

          在我的情况下,我们的 IT 部门对我们的域强制执行 MFA。这意味着我们只能使用option 3 in this Microsoft article to send email。选项 3 涉及使用 Office365 连接器设置 SMTP 中继。

          【讨论】:

            【解决方案6】:

            将用户默认凭据设置为true

             smtp.UseDefaultCredentials = True;
            

            在此之前,输入您的凭据:

            smtp.Credentials = new NetworkCredential(fromAddress, fromPassword);
            

            这应该可以正常工作。

            【讨论】:

              【解决方案7】:

              您似乎将From 地址传递为emailAddress,这不是一个正确的电子邮件地址。对于 Office365,From 需要是 Office365 系统上的真实地址。

              如果您将电子邮件地址硬编码为 From 和 Office 365 密码,则可以验证这一点。

              当然不要把它留在那里。

              【讨论】:

                【解决方案8】:

                如果您以这种方式重新排序代码,它应该可以工作:

                SmtpClient client = new SmtpClient();
                client.UseDefaultCredentials = false;
                client.Credentials = new System.Net.NetworkCredential(mailOut, pswMailOut);
                client.Port = 587; // 25 587
                client.Host = "smtp.office365.com";
                client.DeliveryMethod = SmtpDeliveryMethod.Network;
                client.EnableSsl = true;
                
                MailMessage mail = new MailMessage();            
                mail.From = new MailAddress(mailOut, displayNameMailOut);
                mail.To.Add(new MailAddress(mailOfTestDestine));
                mail.Subject = "A special subject";
                mail.Body = sb.ToString();
                
                client.Send(mail);
                

                【讨论】:

                  【解决方案9】:

                  在我的例子中,Office 365 中的 FROM 帐户启用了 2 因素身份验证。一旦关闭,电子邮件就成功发送。

                  【讨论】:

                  • 如何进行 2 因素身份验证?
                  【解决方案10】:

                  在我的例子中,我使用了 MailMessage 构造函数,它接受两个字符串(to、from)并得到相同的错误。当我使用默认构造函数,然后将 MailAddress 对象添加到 MailMessage 的 To 属性时,它工作正常。

                  【讨论】:

                  • 终于给我一个可行的答案。谢谢!我在 To 字段中使用了一个简单的字符串,而不是类型 MailAddress。错误信息绝对是误导
                  【解决方案11】:

                  添加属性后开始工作:

                  mail.smtp.starttls.enable=true
                  

                  使用:

                  mail.smtp.host=smtp.office365.com
                  mail.smtp.port=587
                  mail.transport.protocol=smtp
                  mail.smtp.auth=true
                  mail.smtp.starttls.enable=true
                  mail.smtp.user=xxx@example.com
                  mail.smtp.password=xxx
                  mail.smtp.from=yyy@example.com
                  

                  【讨论】:

                  • 这是什么语言?它似乎不是 C# SmtpClient()
                  • 它是可以用任何语言解析的属性列表。
                  • 如何在 C# 中启用 TLS?
                  • 这不像 C# SmtpClient()
                  【解决方案12】:

                  我更改了 Office365 密码,然后尝试发送测试电子邮件,这对我来说就像一个魅力。

                  我使用前端(数据库邮件选项)和设置为 smtp.office365.com 端口号 587 并检查了安全连接选项。使用基本身份验证并存储凭据。希望这对某人有用。

                  【讨论】:

                    【解决方案13】:

                    如果您使用的是 Office 365,请按照以下步骤操作:

                    1. 使用 Azure power shell 检查密码过期时间:Get-MsolUser -All |选择 DisplayName、LastPasswordChangeTimeStamp
                    2. 使用新密码(不是旧密码)更改密码。您最终可以使用旧密码,但需要更改两次。

                    希望对您有所帮助!

                    【讨论】:

                      【解决方案14】:

                      我以前也有同样的问题。

                      添加域解决它..

                      mySmtpClient.Credentials = New System.Net.NetworkCredential("email@domain.com", "password", "domain.com")
                      

                      【讨论】:

                      • 这对我来说是正确的解决方案。我有一个应用程序运行,每天发送电子邮件一年多,突然它停止工作。修复它的更改就是这个,即使我的网络凭据实际上不是我的电子邮件,这个修复工作。
                      • 不是添加域名,而是使用电子邮件地址作为用户名解决了我的问题。 NetworkCredential(email, password);
                      【解决方案15】:

                      这是一个老问题,但由于这是谷歌针对此错误的第一个结果,我想我会更新我在这个问题上的进展。

                      我在这个问题上花了太多时间。最后我不得不多次更改我的 Office 365 帐户的密码,直到我的代码成功发送电子邮件。

                      不必对代码进行任何更改。

                      【讨论】:

                      • 我只改过一次。当我尝试登录时,它告诉我密码已过期。
                      【解决方案16】:

                      我在这方面花费了太多时间,解决方案非常简单。 我必须使用我的“MX”作为主机和端口 25。

                              var sClient = new SmtpClient("domain-com.mail.protection.outlook.com");
                              var message = new MailMessage();
                      
                              sClient.Port = 25;
                              sClient.EnableSsl = true;
                              sClient.Credentials = new NetworkCredential("user", "password");
                              sClient.UseDefaultCredentials = false;
                      
                              message.Body = "Test";
                              message.From = new MailAddress("test@test.com");
                              message.Subject = "Test";
                              message.CC.Add(new MailAddress("dude@good.com"));
                      
                              sClient.Send(message);
                      

                      【讨论】:

                      • 这个对我有用。检查这篇微软文章support.office.com/en-us/article/…
                      • 对我来说 sClient.EnableSsl = true;未定义。
                      • You need to set "UseDefaultCredentials" to false first and then set Credentials. If you set "UseDefaultCredentials" after that it resets the NetworkCredential to null.
                      • 如何获得 MX 值?
                      • 使用 MX 记录作为主机,您可以仅向内部电子邮件地址发送电子邮件(即仅向与发送地址相同的域)
                      【解决方案17】:

                      主要有两个原因,仅在上面的 cmets 中提到

                      1. 您设置的NetworkCredentials 应该是正确的。尝试实际登录帐户进行验证。
                      2. 您需要先将UseDefaultCredentials设置为false,然后再设置Credentials 要么 将smtp.UseDefaultCredentials = false; 放在smtp.Credentials assignment 上方。

                      【讨论】:

                        【解决方案18】:

                        @Reshma- 如果你还没有想到,下面是我尝试过的事情,它解决了同样的问题。

                        1. 确保您设置的 NetworkCredentials 是正确的。例如,在我的例子中,因为它是办公室 SMTP,所以用户 ID 必须与域名一起在 NetworkCredential 中使用,而不是实际的电子邮件 ID。

                        2. 您需要先将“UseDefaultCredentials”设置为 false,然后再设置 Credentials。如果之后设置“UseDefaultCredentials”,它会将 NetworkCredential 重置为 null。

                        希望对你有帮助。

                        【讨论】:

                        • 就是这样!我不知道“UseDefaultCredentials”会清除凭据。谢谢!
                        • 在我的情况下,哪个先行并不重要。只要“UseDefaultCredentials”为假。有用。我想知道为什么。
                        猜你喜欢
                        • 1970-01-01
                        • 2019-09-15
                        • 1970-01-01
                        • 2018-08-02
                        • 1970-01-01
                        • 1970-01-01
                        • 2019-06-05
                        • 2019-10-21
                        • 1970-01-01
                        相关资源
                        最近更新 更多