使用“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”的异常:“值不在预期范围内。”

Unity 单元测试 - 检查带有参数的函数调用是不是引发异常

爬虫简介和requests模块

Dubbo接口中出现复杂参数,调用异常问题处理