为什么使用带有-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"
错误消息:
发送邮件消息:无法从传输连接中读取数据:现有连接已被远程主机强行关闭。
答案 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'