PowerShell Send-MailMessage认证异常求助:SMTP 5.7.0错误排查
解决PowerShell发送Gmail邮件的SMTP认证错误
问题分析
你的脚本执行时抛出的5.7.0 Authentication Required错误,核心原因是Google当前的安全策略不再允许使用账号原密码通过SMTP服务登录,必须通过两步验证+应用专用密码的方式完成认证。
解决步骤
第一步:开启Google账号两步验证
登录你的Google账号,进入账号安全设置,找到「两步验证」选项并开启,按照引导完成验证方式绑定(比如手机号验证)。第二步:生成应用专用密码
开启两步验证后,回到安全设置页面,找到「应用专用密码」选项:- 选择应用类型为「邮件」,设备类型选「其他(自定义名称)」,比如输入「PowerShell邮件脚本」
- 点击生成,系统会给出一个16位无空格的密码,保存好这个密码。
第三步:修正脚本细节
你的脚本中有个小问题:$SMTPPort被定义为字符串类型,需改为数字类型;同时执行脚本时,Get-Credential弹窗里输入的用户名是发件邮箱powershell121@gmail.com,密码填刚才生成的16位应用专用密码(不是你的Google账号原密码)。修正后的脚本如下:$Sender = "powershell121@gmail.com" $Reciever = "powershell122@gmail.com" $Subject = "testing script" $Body = " this is a mail sender powershell script , from me to me " $SMTPServer = "smtp.gmail.com" $SMTPPort = 587 # 去掉引号,改为数字类型 Send-MailMessage -From $Sender -to $Reciever -Subject $Subject -Body $Body -SmtpServer $SMTPServer -port $SMTPPort -UseSsl -Credential (Get-Credential)
补充说明
Google在2022年已停止支持「不太安全的应用」登录,不要尝试通过开启该选项解决问题,必须使用两步验证+应用专用密码的方案。如果使用PowerShell 7及以上版本,可考虑使用Send-MgMail(基于Microsoft Graph API)替代Send-MailMessage,但配置相对复杂。
内容的提问来源于stack exchange,提问作者1Zixo
相关产品推荐
相关产品推荐

