2016-06-28 4 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.

Используя его, дает мне ошибку

Send-MailMessage: Сервер не поддерживает безопасные соединения.

Не использовать его, дает мне ошибку

Send-MailMessage: Сервер SMTP требует защищенного соединения или клиент не прошел проверку подлинности. Ответ сервера: 5.7.0. Сначала необходимо выполнить команду STARTTLS. 4sm4306203pav.33 - gsmtp

ответ

0

Net.Mail.SmtpClient и Send-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 

и ваш код должен работать.

Смежные вопросы