使用MailKit实现Outlook SMTP邮件发送时认证失败求助(IMAP正常)
解决Outlook SMTP OAuth2认证失败(535: 5.7.3 Authentication unsuccessful)
确认SMTP服务器地址
Outlook官方SMTP服务器是smtp.office365.com,检查你的SmtpLink常量是否配置正确,别用smtp.live.com这类旧地址。验证AccessToken的权限范围
获取AccessToken时必须请求SMTP相关权限:- 用Microsoft Graph API的话,要申请
Mail.Send权限(委托或应用权限均可); - 用传统EWS或SMTP专属权限的话,得包含
SMTP.Send权限。
仅配置IMAP权限(比如IMAP.AccessAsUserAll)无法用于SMTP认证,这大概率是IMAP正常但SMTP失败的核心原因。
- 用Microsoft Graph API的话,要申请
检查AccessToken的受众(Audience)
Outlook SMTP OAuth2要求token的受众必须是https://outlook.office365.com/,如果你的token受众是Graph API的https://graph.microsoft.com/,必然会导致认证失败。获取token时要指定正确的资源或范围。简化SaslMechanism使用逻辑
针对Outlook SMTP,直接使用SaslMechanismOAuth2兼容性更好,无需额外判断OAUTHBEARER机制,代码可调整为:private const string SmtpLink = "smtp.office365.com"; await base.SmtpClient.ConnectAsync(SmtpLink, 587, SecureSocketOptions.StartTls); var oauth2 = new SaslMechanismOAuth2(account.Email, credentials.AccessToken); await base.SmtpClient.AuthenticateAsync(oauth2);排查账户安全设置
如果账户开启了多重身份验证(MFA),禁止使用普通密码,必须通过OAuth2流程获取有效AccessToken;同时检查组织级安全策略是否限制了SMTP OAuth2的使用。
内容的提问来源于stack exchange,提问作者Valentin Maschenko
相关产品推荐
相关产品推荐

