.NET SmtpClient因基础认证停用的迁移方案咨询
.NET应用邮件发送认证迁移问题
背景与问题
我有多个基于.NET Framework 4.8和.NET Core的应用(Web、控制台、API、类库),均使用SmtpClient发送邮件,代码示例如下:
SmtpClient smtp = new SmtpClient(); smtp.Host = smtpServer; smtp.Port = smtpPort; smtp.EnableSsl = smtpEnableSsl; smtp.Credentials = new NetworkCredential(smtpUsername, smtpPassword); ... MailMessage mail = new MailMessage(); ... smtp.Send(mail);
自2022年5月谷歌、2022年10月微软停用*基础认证(Basic Auth)*后,发送邮件时出现报错。我希望解决方案能兼容更多服务商,而非仅针对这两家。
调研的可选方案
目前我尝试替换现有实现,调研了以下方案:
微软OAuth2方案
- EWS:较旧的SOAP协议,如Mailkit库所使用
- Microsoft Graph
谷歌方案
- 将账户密码(
smtpPassword)替换为应用密码(App Password) - OAuth2:如Mailkit库所使用
付费组件
MailBee、Rebex等第三方付费组件
疑问与诉求
我认为当前迁移应选择微软Graph方案,且不采用谷歌的应用密码方案,这个思路是否正确?
我已调研过主流方案,但未找到足够信服的最优解。想了解:
- 是否有开发者遇到过相同问题,以及可用的迁移工具?
- 原
SmtpClient是通用方案,现在是否需要针对每个服务商单独实现?
补充说明
经微软确认,SMTP AUTH的管控规则如下:
- 若租户从未使用SMTP AUTH,微软已通过全局控制项
SmtpClientAuthenticationDisabled主动禁用该协议;- 若租户正在使用SMTP AUTH,微软不会禁用该协议,默认认为租户有合理业务需求;
- 若租户在被禁用后需重新使用SMTP AUTH,可通过
Set-TransportConfigcmdlet将SmtpClientAuthenticationDisabled设为$False,但此操作会全局启用SMTP AUTH。建议通过邮箱级设置单独启用,仅允许需要的邮箱使用该协议。
内容的提问来源于stack exchange,提问作者Emanuele
相关产品推荐
相关产品推荐

