使用“1”参数调用“发送”的异常:“根据验证程序,远程证书无效。PowerShell

Jos*_*osh 5 windows powershell events procedure server

我正在尝试设置一个电子邮件 PowerShell 脚本,它可以让我在任务调度程序运行脚本时发送电子邮件。我遇到的问题是:

Exception calling "Send" with "1" argument(s): "The remote certificate is invalid according to the validation procedure."
Run Code Online (Sandbox Code Playgroud)

我正在运行以下代码:

$SMTPClient = New-Object Net.Mail.SmtpClient("SMTP", PORT)
$SMTPClient.Credentials = New-Object System.Net.NetworkCredential("username", "password")
$MailMessage = (New-Object system.net.mail.mailmessage)
$MailMessage.from = ("FROM")
$MailMessage.To.Add("TO")
$MailMessage.Subject = ("Subject")
$MailMessage.Body = ("Body")
$Smtpclient.EnableSsl = ($true)
$SmtpClient.Timeout = (300000)
$SmtpClient.Send($MailMessage)
Write-Output "Message sent";
Run Code Online (Sandbox Code Playgroud)

它给了我上面指定的错误。我在 Windows Server 2012 R2 上运行此代码,此代码在普通 Windows 10、8 和 7 上运行,但不适用于服务器。请有人可以给我一个快速简便的解决方案。在这个开发阶段,安全性确实不是问题,因此欢迎任何解决方案。谢谢

Jos*_*osh 11

事实证明,经过大量研究和观察,然后确认。答案是在发送命令之前添加:

[System.Net.ServicePointManager]::ServerCertificateValidationCallback = { return $true }
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助 Avshalom 和 Alexander Obersht


小智 5

这仍然无法解决您的证书存在问题的事实,可能与主机、过期证书或中间证书不匹配。通过在调用 Send 之前将上面的此类添加到脚本中,您将禁用证书验证,只有当您不需要解决证书问题时,这才是一种解决方法。