使用PowerShell发邮件是否兼容Gmail/Outlook的OAuth2新规范?
你的PowerShell邮件脚本与Gmail、Outlook OAuth2新规范的兼容性分析
你的现有脚本使用System.Net.Mail.SmtpClient结合NetworkCredential的**用户名+密码(或应用专用密码)**认证方式,这种方式并不兼容Gmail、Outlook/Hotmail即将强制执行的OAuth2规范,具体情况如下:
Gmail 兼容性说明
目前Gmail对开启2FA的账号仍允许使用应用专用密码进行SMTP认证,你的脚本暂时还能运行。但一旦Gmail完全切换到强制OAuth2认证,该脚本会直接失效——因为System.Net.Mail.SmtpClient并不原生支持OAuth2认证流程。
Outlook/Hotmail 兼容性说明
从10月开始,Outlook/Hotmail将彻底停用传统的SMTP密码认证,强制要求使用OAuth2。你的现有脚本依赖NetworkCredential的认证方式会直接无法发送邮件,必须切换到OAuth2兼容的实现方案。
兼容OAuth2的解决方案
要适配新规范,需要放弃System.Net.Mail类库,改用支持OAuth2的邮件发送方案:
对于Outlook/Hotmail:使用Microsoft Graph PowerShell模块
微软官方推荐通过Graph API发送邮件,原生支持OAuth2,示例脚本如下:
# 首次运行先安装模块 # Install-Module -Name Microsoft.Graph.Mail -Scope CurrentUser -Force # 连接到Graph,请求邮件发送权限 Connect-MgGraph -Scopes "Mail.Send" # 构建邮件内容 $mailParams = @{ Message = @{ Subject = "你的邮件主题" Body = @{ ContentType = "Text" Content = "邮件正文内容" } ToRecipients = @( @{ EmailAddress = @{ Address = "收件人邮箱地址" } } ) Attachments = @( @{ "@odata.type" = "#microsoft.graph.fileAttachment" Name = "Test.PDF" ContentBytes = [System.IO.File]::ReadAllBytes("C:\Temp\Test.PDF") } ) } SaveToSentItems = $true } # 发送邮件 Send-MgUserMail -UserId "你的发件人邮箱地址" -BodyParameter $mailParams
对于Gmail:使用Google Gmail API的.NET库
可以在PowerShell中调用Google.Apis.Gmail.v1库实现OAuth2认证发送邮件,核心步骤为创建OAuth2凭据、构建邮件请求并通过API发送。
内容的提问来源于stack exchange,提问作者niyo66
相关产品推荐
相关产品推荐

