目前,我们有一个发送电子邮件的web表单,几个月前,随着我们公司Office 365的迁移,该表单已停止工作。我在排除故障时消除了所有其他代码,只需运行电子邮件部分即可获得以下错误:“System.Net.Mail.SmtpException:SMTP服务器需要安全连接,或者客户端未经过身份验证。服务器响应为:5.7.57 SMTP;客户端未经身份验证,无法在Mail FROM期间发送匿名邮件”。
我在Web/堆栈溢出上发现了许多具有相同错误代码的解决方案,尝试将代码更改为建议的解决方案,但运气不好。
尝试了我们全球地址列表中列出的许多不同的电子邮件别名,但我的帐户没有运气,不同的端口(25,587),不同的smtp地址,到目前为止还没有运气。
多个用户在下面链接的文章中声明“不幸的是,此代码不再对Office 365有效。出现的错误消息是SMTP服务器需要安全连接或客户端未通过身份验证。服务器响应是: 5.7.57 SMTP;客户端未通过身份验证以在邮件来自[HE1PR05CA0133.eurprd05.prod.outlook.com]期间发送匿名邮件”。
使用系统发送SMTP电子邮件。Net.Mail通过Exchange Online (Office 365)
我的代码见下文。
Dim mail As MailMessage = New MailMessage
mail.From = New MailAddress("email12345@company.com")
mail.To.Add("email12345@company.com")
mail.Subject = "Test"
mail.IsBodyHtml = False
mail.Body = "Test"
Dim SmtpServer As SmtpClient = New SmtpClient
SmtpServer.Host = "smtp.office365.com"
SmtpServer.Port = 587
SmtpServer.UseDefaultCredentials = False
SmtpServer.Credentials = New System.Net.NetworkCredential("MyEmail", "MyPass")
SmtpServer.DeliveryMethod = SmtpDeliveryMethod.Network
SmtpServer.EnableSsl = True
SmtpServer.TargetName = "STARTTLS/smtp.office365.com"
Try
SmtpServer.Send(mail)
Catch ex As Exception
Response.Write(ex.ToString)
End Try
由于这种情况似乎发生在许多人身上,我想知道他们正在做些什么来解决这个问题?
我通过为我的outlook365帐户创建应用程序密码解决了这个问题。您可以按如下方式创建/管理应用程序密码。
转到我的帐户
创建应用程序密码并在代码中使用。希望这能解决你的问题
要启用app-password,您必须在帐户上进行双重身份验证,并且管理员(如果您的帐户在组织中)必须允许在帐户上(或在组织中)使用app-password。我不是365管理员,不了解所有设置。
为Outlook等(客户端?)启用了现代身份验证,但没有为“SMTP AUTH”,“IMAP”和“POP”启用(我假设这是“默认值”,建议不要启用新式身份验证,除非您需要它。
https://learn.microsoft.com/en-us/exchange/clients-and-mobile-in-exchange-online/authenticated-client-smtp-submission几乎所有连接到Office 365或Microsoft 365中Exchange Online邮箱的现代电子邮件客户端(例如,Outlook、Outlook网页版、iOSMail、OutlookiOS和Android等)不使用SMTP AUTH发送电子邮件。
因此,我们强烈建议您在Exchange Online组织中禁用SMTP AUTH,并仅为仍然需要它的帐户(即邮箱)启用它。有两个设置可以帮助您做到这一点:一个组织范围的设置,用于禁用(或启用)SMTP AUTH
覆盖租户范围设置的每个邮箱设置。
也很高兴知道。将列出“smtp身份验证客户端”的数量。https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/mfi-smtp-auth-clients-report?view=o365-worldwide