我有这个使用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
答案 0 :(得分:1)
Net.Mail.SmtpClient
和Send-MailMessage
是同一端的两种方式:从PowerShell发送邮件。但是,在您的示例代码中,SmtpClient
语句只创建一个客户端,而实际上没有对它执行任何操作,而Send-MailMessage
语句未指定正确的端口(587),因此默认端口(25)是反而用了。
<强> - 端口&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
并且您的代码应该可以使用。