SMTP的安全连接

时间:2016-06-28 06:54:52

标签: powershell ssl smtp

我有这个使用SMTP发送电子邮件的简单脚本。

$EmailFrom = "from@gmail.com"
$EmailTo = "to@gmail.com"
$Subject = "Reports"
$Body = "Please see attachments"
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SMTPClient($SMTPServer, 587)
$User = "from"
$PWord = ConvertTo-SecureString –String "Password" –AsPlainText -Force
$Credential = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $User, $PWord
Send-MailMessage -SmtpServer $SMTPServer -Credential $Credential -From $EmailFrom -To $EmailTo -Subject $Subject

我使用-UseSsl时遇到问题。

使用它,给我错误

  

Send-MailMessage:服务器不支持安全连接。

不使用它,给我错误

  

Send-MailMessage:SMTP服务器需要安全连接,或者客户端未经过身份验证。服务器响应为:5.7.0必须首先发出STARTTLS命令。 4sm4306203pav.33 - gsmtp

1 个答案:

答案 0 :(得分:1)

Net.Mail.SmtpClientSend-MailMessage是同一端的两种方式:从PowerShell发送邮件。但是,在您的示例代码中,SmtpClient语句只创建一个客户端,而实际上没有对它执行任何操作,而Send-MailMessage语句未指定正确的端口(587),因此默认端口(25)是反而用了。

来自documentation

  

<强> - 端口&LT;&的Int32 GT;
  指定SMTP服务器上的备用端口。默认值为25,这是默认的SMTP端口。此参数在Windows PowerShell 3.0和更新版本中可用。

更改

...
$SMTPServer = "smtp.gmail.com"
$SMTPClient = New-Object Net.Mail.SMTPClient($SMTPServer, 587)
$User = "from"
$PWord = ConvertTo-SecureString –String "Password" –AsPlainText -Force
$Credential = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $User, $PWord
Send-MailMessage -SmtpServer $SMTPServer -Credential $Credential -From $EmailFrom -To $EmailTo -Subject $Subject

...
$SMTPServer = "smtp.gmail.com"
$User = "from"
$PWord = ConvertTo-SecureString –String "Password" –AsPlainText -Force
$Credential = New-Object –TypeName "System.Management.Automation.PSCredential" –ArgumentList $User, $PWord
Send-MailMessage -SmtpServer $SMTPServer -Port 587 -UseSsl -Credential $Credential -From $EmailFrom -To $EmailTo -Subject $Subject

并且您的代码应该可以使用。