使用SmtpClient的C#应用出现5.7.57身份验证失败问题求助
问题描述
多个运行多年的C#应用(使用SmtpClient)突然停止工作,抛出以下异常:
System.Net.Mail.SmtpException HResult=0x80131500 Message=The SMTP server requires a secure connection or the client was not authenticated. The server response was: 5.7.57 Client not authenticated to send mail. Error: 535 5.7.139 Authentication unsuccessful, the request did not meet the criteria to be authenticated successfully. Contact your administrator. Source=System.Net.Mail
本人为普通程序员,管理自己的Microsoft 365和Azure账户,应用代码未使用默认凭据,相关代码如下:
using System.Net.Mail; ... client.Credentials = new System.Net.NetworkCredential(FROM, PW, DOMAIN);
在Microsoft 365管理中心尝试启用“Authenticated SMTP”时,出现错误:
Cannot process argument transformation on parameter 'Identity'. Cannot convert value "" to type "Microsoft.Exchange.Configuration.Tasks.RecipientIdParameter". Error: "Parameter values of type Microsoft.Exchange.Configuration.Tasks.RecipientIdParameter can't be empty. Specify a value, and try again. Parameter name: identity"
退出重新登录后,已勾选所有“Manage email apps”选项,但问题仍未解决。
解决步骤
1. 通过PowerShell启用Authenticated SMTP权限
Microsoft 365管理中心的UI操作可能存在异常,建议用PowerShell直接配置:
- 打开Windows PowerShell,连接Exchange Online:
Connect-ExchangeOnline -UserPrincipalName 你的M365账户邮箱 - 执行命令启用当前用户的SMTP客户端认证:
Set-CASMailbox -Identity "你的M365账户邮箱" -SmtpClientAuthenticationDisabled $false - 验证配置是否生效:
返回结果应为Get-CASMailbox -Identity "你的M365账户邮箱" | Select-Object SmtpClientAuthenticationDisabledFalse,表示权限已启用。
2. 检查账户安全限制
- 多重身份验证(MFA):如果账户启用了MFA,传统用户名密码认证会失效。此时需:
- 生成应用密码:登录M365账户,进入「安全中心」→「我的安全设置」→「应用密码」,生成后替换代码中的
PW。 - 或迁移到OAuth 2.0认证方案(推荐,更安全)。
- 生成应用密码:登录M365账户,进入「安全中心」→「我的安全设置」→「应用密码」,生成后替换代码中的
- 条件访问策略:登录Azure门户,进入「Azure Active Directory」→「条件访问」,检查是否有策略限制SMTP客户端的登录请求,尤其是针对旧版协议的拦截规则。
3. 修正SmtpClient代码配置
确保代码使用M365官方指定的SMTP参数:
using System.Net; using System.Net.Mail; // 初始化SmtpClient using (var client = new SmtpClient("smtp.office365.com", 587)) { client.EnableSsl = true; // 必须启用SSL client.UseDefaultCredentials = false; // 禁用默认凭据 client.Credentials = new NetworkCredential(FROM, 你的密码/应用密码, DOMAIN); // 构造并发送邮件 var mailMessage = new MailMessage(FROM, TO, SUBJECT, BODY); client.Send(mailMessage); }
注意:
SmtpClient已被标记为过时,长期来看建议迁移到MailKit库,它对现代认证(如OAuth 2.0)的支持更完善。
4. 排查账户状态
- 确认账户密码未过期、未被锁定,代码中的密码与当前账户密码一致。
- 查看Azure AD登录日志:进入Azure门户→「Azure Active Directory」→「用户」→「你的账户」→「登录日志」,筛选SMTP相关的失败记录,根据日志提示调整配置。
内容的提问来源于stack exchange,提问作者Moshe Raab
相关产品推荐
相关产品推荐

