You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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 SmtpClientAuthenticationDisabled
    
    返回结果应为False,表示权限已启用。

2. 检查账户安全限制

  • 多重身份验证(MFA):如果账户启用了MFA,传统用户名密码认证会失效。此时需:
    • 生成应用密码:登录M365账户,进入「安全中心」→「我的安全设置」→「应用密码」,生成后替换代码中的PW。
    • 或迁移到OAuth 2.0认证方案(推荐,更安全)。
  • 条件访问策略:登录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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 02:27:49