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

时间:2015-05-20 07:20:56

标签: c# smtp timeout

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

19 个答案:

答案 0 :(得分:20)

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

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

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

  3. 希望它有所帮助。

答案 1 :(得分:20)

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

如果您将电子邮件地址硬编码为来自和办公室365密码,则可以验证。当然不要把它留在那里。

答案 2 :(得分: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);

答案 3 :(得分:10)

我用来解决同样的问题。

添加域名解决了它..

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

答案 4 :(得分:6)

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

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

答案 5 :(得分:4)

这是一个老问题,但由于这是Google首次出现此错误的结果,我想我会更新此问题的进展。

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

没有必要对代码进行任何更改。

答案 6 :(得分:2)

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

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

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

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

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

Microsoft Reference Link

答案 7 :(得分:2)

在我的情况下,为Office 365中的FROM帐户打开了2因子身份验证。一旦将其关闭,则电子邮件发送成功。

答案 8 :(得分:2)

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

  1. 使用Azure power shell检查密码到期时间:Get-MsolUser -All |选择DisplayName,LastPasswordChangeTimeStamp
  2. 使用新密码(不是旧密码)更改密码。您最终可以返回旧密码,但需要将其更改两次。
  3. 希望它有所帮助!

答案 9 :(得分:1)

添加属性后开始工作:

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

答案 10 :(得分:1)

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

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

答案 11 :(得分:1)

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

答案 12 :(得分:0)

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

答案 13 :(得分:0)

如果您重新排序代码,则可以正常工作。那对我有用。

func blockGeneric(dig *digest, p []byte) {
    var w [64]uint32
    h0, h1, h2, h3, h4, h5, h6, h7 := dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7]
    for WorkAround1 := 0; WorkAround1 < len(p); WorkAround1 += chunk {
        WorkAround2 := p[WorkAround1:]
    //for len(p) >= chunk {
        // Can interlace the computation of w with the
        // rounds below if needed for speed.
        for i := 0; i < 16; i++ {
            j := i * 4
            w[i] = uint32(WorkAround2[j])<<24 | uint32(WorkAround2[j+1])<<16 | uint32(WorkAround2[j+2])<<8 | uint32(WorkAround2[j+3])
        }
        for i := 16; i < 64; i++ {
            v1 := w[i-2]
            t1 := (v1>>17 | v1<<(32-17)) ^ (v1>>19 | v1<<(32-19)) ^ (v1 >> 10)
            v2 := w[i-15]
            t2 := (v2>>7 | v2<<(32-7)) ^ (v2>>18 | v2<<(32-18)) ^ (v2 >> 3)
            w[i] = t1 + w[i-7] + t2 + w[i-16]
        }

        a, b, c, d, e, f, g, h := h0, h1, h2, h3, h4, h5, h6, h7

        for i := 0; i < 64; i++ {
            t1 := h + ((e>>6 | e<<(32-6)) ^ (e>>11 | e<<(32-11)) ^ (e>>25 | e<<(32-25))) + ((e & f) ^ (^e & g)) + _K[i] + w[i]

            t2 := ((a>>2 | a<<(32-2)) ^ (a>>13 | a<<(32-13)) ^ (a>>22 | a<<(32-22))) + ((a & b) ^ (a & c) ^ (b & c))

            h = g
            g = f
            f = e
            e = d + t1
            d = c
            c = b
            b = a
            a = t1 + t2
        }

        h0 += a
        h1 += b
        h2 += c
        h3 += d
        h4 += e
        h5 += f
        h6 += g
        h7 += h
        //p = p[chunk:]
    }

    dig.h[0], dig.h[1], dig.h[2], dig.h[3], dig.h[4], dig.h[5], dig.h[6], dig.h[7] = h0, h1, h2, h3, h4, h5, h6, h7

}

答案 14 :(得分:0)

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

答案 15 :(得分:0)

这是在Web.config文件中对我有用的内容。最初,我除了deliveryMethod,clientDomain,defaultCredentials之外都拥有所有其他东西,而我仍然遇到相同的错误。

Environment.ObjectsFactory = new MicrosoftDIObjectsFactory(services.BuildServiceProvider)

答案 16 :(得分:0)

尝试为所用电子邮件重置密码。遇到过类似问题,改密码后修复。

答案 17 :(得分:0)

我遇到了类似的问题。请阅读此microsoft support article。 特别是这个部分。 Outlook IMAP connection error

答案 18 :(得分:-1)

将用户默认凭证设置为“ True”  smtp.UseDefaultCredentials = True;

在输入凭据之前 smtp.Credentials =新的NetworkCredential(fromAddress,fromPassword);

应该没问题