2016-06-28 171 views
1

我有這個簡單的腳本,使用SMTP發送電子郵件。安全連接SMTP

$EmailFrom = "[email protected]" 
$EmailTo = "[email protected]" 
$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時遇到問題。

使用它,給我的錯誤

發送-MAILMESSAGE:服務器不支持安全連接。

不使用它,給我的錯誤

發送-MAILMESSAGE:SMTP服務器要求安全連接或客戶端未通過身份驗證。服務器響應是:5.7.0必須首先發出STARTTLS命令。 4sm4306203pav.33 - gsmtp

回答

0

Net.Mail.SmtpClientSend-MailMessage 2種方式爲同一目的:從PowerShell中發送郵件。但是,在示例代碼中,SmtpClient語句只是創建一個客戶端,而沒有對其做任何事情處理,而Send-MailMessage語句未指定正確的端口(587),因此將使用默認端口(25)。

從:

-Port <的Int32 >
指定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 

和你的代碼應該工作。