为什么Send-MailMessage无法通过端口587使用STARTTLS发送失败

时间:2018-12-14 19:15:48

标签: 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"

错误消息:

  

发送邮件消息: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"

错误消息:

  

发送邮件消息:无法从传输连接中读取数据:现有连接已被远程主机强行关闭。

1 个答案:

答案 0 :(得分:2)

某些SMTP服务器可能已经加固为仅接受TLS 1.2协商STARTTLS。在许多情况下,当指定-UseSSL时,Windows默认配置为发送TLS 1.0。

要强制Send-MailMessage使用TLS 1.2,必须在执行Send-MailMessage之前在脚本中添加一行:

请输入:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'