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

Res*_*hma 48 c# timeout smtp

我必须使用我的网络应用程序发送邮件.鉴于以下代码显示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);
     }
  } 
 }
Run Code Online (Sandbox Code Playgroud)

小智 23

@Reshma-如果你还没有想到它,这里有我试过的东西,它解决了同样的问题.

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

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

希望能帮助到你.

  • 而已!我不知道"UseDefaultCredentials"会清除凭据.谢谢! (7认同)

小智 21

我可能不是一个优秀的程序员,但你似乎将From地址作为"emailAddress"传递,这不是一个合适的电子邮件地址,对于Office365来说,需要成为Office365系统上的真实地址.

如果您将电子邮件地址硬编码为from和office 365密码,则可以验证.当然,不要把它留在那里.


Moh*_*qas 15

就我而言,我按照以下 3 个步骤进行操作,结果成功了。

\n

如果您收到以下错误之一:\n535 5.7.3 身份验证失败\n5.7.57 客户端未经过身份验证以发送邮件\n您应该检查以下几项内容:

\n
    \n
  1. 在正在使用的许可邮箱上启用客户端 SMTP 提交:\n从 Microsoft 365 管理中心,转到“活动用户”并选择用户。\n转到“邮件”选项卡。\n在“电子邮件应用”部分中,选择“管理电子邮件应用”。\n验证已选中(启用)经过身份验证的 SMTP 设置。\n选择“保存更改”。

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

    \n
  4. \n
  5. 通过将“启用安全默认值”切换为“否”来禁用 Azure 安全默认值:\n作为安全管理员、条件访问管理员或全局管理员登录到\xe2\x80\xaf Azure 门户\xe2\x80\xaf。\n浏览到\xe2 \x80\xaf Azure Active Directory \xe2\x80\xaf>\xe2\x80\xaf属性。\n选择“管理安全默认值”。\n将“启用安全默认值”设置为切换为“否”。\n选择“保存”。

    \n
  6. \n
\n

微软参考链接

\n


Ron*_*ack 11

我花了太多时间在这上面,解决方案非常简单.我不得不使用我的"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);
Run Code Online (Sandbox Code Playgroud)

  • 对我来说sClient.EnableSsl = true; 未定义。 (3认同)
  • `您需要先将“ UseDefaultCredentials”设置为false,然后再设置凭据。如果此后设置“ UseDefaultCredentials”,则它将NetworkCredential重置为null。 (3认同)
  • 你如何获得 ***MX*** 值? (3认同)
  • 这是为我工作的。查看此 Microsoft 文章 https://support.office.com/en-us/article/How-to-set-up-a-multifunction-device-or-application-to-send-email-using-Office-365- 69f58e99-c550-4274-ad18-c805d654b4c4?ui=en-US&rs=en-US&ad=US (2认同)
  • 使用 MX 记录作为主机使您可以仅将电子邮件发送到内部电子邮件地址(即仅发送到与发送地址相同的域) (2认同)

Zvi*_*ler 11

我用来遇到同样的问题.

添加域名解决了..

mySmtpClient.Credentials = New System.Net.NetworkCredential("email@domain.com", "password", "domain.com")
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说是正确的解决方案.我有一个应用程序正在运行,每天发送电子邮件超过一年,突然它停止工作.修复它的更改是这个,即使我的网络凭据实际上不是我的电子邮件,这个修复工作. (2认同)
  • 它不是添加域名,而是使用电子邮件地址作为userName解决了我的问题。`NetworkCredential(电子邮件,密码);` (2认同)

Dan*_*ela 9

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


小智 6

仅有上述评论中提到的两个主要原因

  1. 您设置的NetworkCredentials应该是正确的.验证尝试实际登录帐户.
  2. 您需要先设置UseDefaultCredentials为false,然后将Credentials Or Put设置smtp.UseDefaultCredentials = false;smtp.Credentials assignment.


Spi*_*itz 5

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

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

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

  • 我只改变过一次。当我尝试登录时它告诉我密码已过期。 (3认同)

Mat*_*nta 5

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

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

希望能帮助到你!