Dsc*_*duc 2 powershell ssl smtp tls1.2
为什么使用标志 -Port 587 通过 Send-MailMessage 命令从 PowerShell 发送电子邮件会产生错误。
命令:
Send-Mailmessage -smtpServer mail.server.com -Port 587 -from "admin@domain.com" -to "user@domain.com" -subject "Test" -body "Test"
Run Code Online (Sandbox Code Playgroud)
错误信息:
Send-Mailmessage :SMTP 服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.7.0 必须首先发出 STARTTLS 命令
PowerShell 文档表示添加 -UseSSL 应指定发送 STARTTLS 命令,但即使添加此标志也可能无法解决您的问题。
命令:
Send-Mailmessage -smtpServer mail.server.com -Port 587 -UseSsl -from "admin@domain.com" -to "user@domain.com" -subject "Test" -body "Test"
Run Code Online (Sandbox Code Playgroud)
错误消息:
Send-Mailmessage:无法从传输连接读取数据:现有连接被远程主机强制关闭。
某些 SMTP 服务器可能已强化为仅接受 TLS 1.2 来协商 STARTTLS。在许多情况下,当指定 -UseSSL 时,Windows 默认配置为发送 TLS 1.0。
要强制 Send-MailMessage 使用 TLS 1.2,需要在执行 Send-MailMessage 之前在脚本中添加一行:
要么输入:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Run Code Online (Sandbox Code Playgroud)
或者
[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
25576 次 |
| 最近记录: |