使用“1”参数调用“发送”的异常:“根据验证过程,远程证书无效。PowerShell
Posted
技术标签:
【中文标题】使用“1”参数调用“发送”的异常:“根据验证过程,远程证书无效。PowerShell【英文标题】:SMTPClient Failure During Send Concerning Arguments 【发布时间】:2016-07-22 23:27:09 【问题描述】:我正在尝试设置一个电子邮件 PowerShell 脚本,让我在任务计划程序运行脚本时发送电子邮件。我遇到的问题是:
Exception calling "Send" with "1" argument(s): "The remote certificate is invalid according to the validation procedure."
我正在运行以下代码:
$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";
它给了我上面指定的错误。我在 Windows Server 2012 R2 上运行此代码,此代码可在普通的 Windows 10、8 和 7 上运行,但不适用于服务器。请有人给我一个快速简便的解决方案。在这个开发阶段,安全性确实不是问题,因此欢迎任何解决方案。谢谢
【问题讨论】:
尝试删除'EnableSsl',也可以使用Send-MailMessage
cmdlet
我必须为这个特定的 SMTP 客户端使用 SSL。没有它就行不通。我想我已经尝试过 send-mailmessage cmdlet,问题是我不知道如何获取该命令中指定的所有参数,而 smtpclient.send 将所有参数都添加进去。还有其他想法吗?
A quick and easy solution.
Additional info and alternative solutions(在 C# 中)。
【参考方案1】:
$Smtpclient.EnableSsl = ($false)
它解决了我的问题:)
【讨论】:
【参考方案2】:这仍然不能解决您的证书有问题的事实,可能是与主机不匹配、过期证书或中间证书。通过在调用 Send 之前将上面的此类添加到您的脚本中,您将禁用证书验证,只有当您不需要解决证书问题时,这才是一种解决方法。
【讨论】:
【参考方案3】:经过大量研究、查看和确认,结果证明了这一点。答案是在发送命令之前添加:
[System.Net.ServicePointManager]::ServerCertificateValidationCallback = return $true
感谢 Avshalom 和 Alexander Obersht 的所有帮助
【讨论】:
工作就像一个魅力!谢谢以上是关于使用“1”参数调用“发送”的异常:“根据验证过程,远程证书无效。PowerShell的主要内容,如果未能解决你的问题,请参考以下文章
Mockito 异常 - when() 需要一个参数,该参数必须是模拟上的方法调用
如何使用 C# 中的反射调用将输入参数作为另一个类对象的方法?(方法给出参数异常)
使用“3”参数调用“BeginSendMessage”的异常:“值不在预期范围内。”