5.7.57 SMTP - 客户端未通过身份验证以在 MAIL FROM 错误期间发送匿名邮件

5.7.57 SMTP - Client was not authenticated to send anonymous mail during MAIL FROM error

我必须使用我的网络应用程序发送邮件。鉴于以下代码显示 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.

帮我找到合适的解决办法。谢谢。

代码:

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);
     }
  } 
 }

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

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

当然不要把它留在那里。

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

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

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

希望对您有所帮助。

上面评论中提到的主要两个原因

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

我在这上面花了太多时间,解决方案非常简单。 我必须使用 "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);

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

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

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

我以前也遇到过同样的问题

添加域名解决了..

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

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

  1. 使用 Azure power 检查密码过期时间 shell :Get-MsolUser -All | select 显示名称、上次密码更改时间戳
  2. 使用新密码(不是旧密码)更改密码。您最终可以返回到旧密码,但需要更改两次。

希望对您有所帮助!

我更改了 Office365 密码,然后尝试发送一封测试电子邮件,这对我来说非常有效。

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

添加属性后开始工作:

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

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

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

将用户默认凭据设置为 true:

 smtp.UseDefaultCredentials = True;

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

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

这应该没问题。

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

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);

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

您尝试发送的帐户密码可能 e-mail 已过期。只需检查您的密码政策到期日期。

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

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

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

如果您遇到以下错误之一: 535 5.7.3 认证不成功 5.7.57 客户端未通过身份验证无法发送邮件 您应该检查一些事项:

  1. 在正在使用的许可邮箱上启用客户端 SMTP 提交: 从 Microsoft 365 管理中心,转到 活动用户 和 select 用户。 转到 邮件选项卡 。 在 电子邮件应用程序 部分,select 管理电子邮件应用程序。 验证已验证的 SMTP 设置是否已选中(启用)。 Select 保存更改。

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

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

Microsoft Reference Link

对我们来说,它以这种方式失败了,但仅来自服务器 (Azure) 而不是来自开发人员机器。

原来Office365管理员在公司所在国家以外访问office365时需要MFA。

我们的生产服务器在爱尔兰,但开发机器在瑞典 -> 混乱...管理员为我们的发送帐户启用了 MFA -> 工作。