
Client not authenticated to send mail。Client ID 和 Tenant IDSMTP.SendAsAppObjectId 要去"企业应用程序"里找同名应用取值,跟"应用注册"页面的 Object ID 不是一个东西——这个细节很多人会搞混。for the Tenant 而不是具体邮箱,这是判断该改哪一层的关键线索。RCPT TO 也被服务器接受,结果发送阶段又报错:RCPT TO)明明返回了 250 Recipient OK。问题出在邮件正文里的 To: 这个 MIME 头。formataddr,只对显示名部分编码,地址部分保持 ASCII 明文:Sender throttled due to continuous invalid recipients errors)。改完代码后不要立刻重测,建议等十几分钟让限流窗口过去,不然即便代码修对了,也可能先撞上限流这道墙,容易误判"还没修好"。IEmailSender 默认实现只支持 Host/Port/UserName/Password 这种基本认证配置,不原生支持 OAuth2。社区已经有正式的 Feature Request,官方回复目前需要自己写自定义实现。IEmailSender,内部走 OAuth2 逻辑,然后在模块里替换掉默认注册:IEmailSender 的地方(身份验证邮件、系统通知等)都会自动切换到 OAuth2,不用改调用方代码。SMTP.SendAsApp | Mail.Send | |
New-ServicePrincipal 等) | ||
Users[邮箱].SendMail,不能用 Me.SendMail——应用程序上下文没有真正登录的用户,调不了 /me 端点sendMail 时会返回 403,这个坑排查起来容易走弯路for the Tenant 这个关键词是重要线索formataddr,不要把邮箱地址跟显示名一起塞进 Base64
夜雨聆风