невозможно отправить почту из PowerShell - PullRequest
0 голосов
/ 05 августа 2020

Невозможно отправить почту через PowerShell с помощью Gmail. Код проверяет, есть ли доступ к веб-сайту, и отправляет электронное письмо.

Разрешить доступ к менее безопасному приложению - включен, двухэтапная проверка и сгенерирован пароль приложения.

ошибка: Send-MailMessage : Невозможно прочитать данные из транспортного соединения: net_io_connectionclosed .. См. Мой код ниже:


$recipient = "recipeint email"
$smtpUser = "sender email"
$mysubject = "Daily Checks"
$mailbodyonline = “Good day, The Website is available” 
$mailbodyoffline = “Good day, The Website is not available”
$mailserver = "smtp.gmail.com"


$smtpPassword = "C:\mySriptFile\siteemailpass.txt"

$mypassword = ConvertTo-SecureString $smtpPassword -AsPlainText -Force

$Creds = New-Object -TypeName System.Management.Automation.PSCredential $smtpUser, $mypassword



$progressPreference = 'silentlyContinue'
$HTTP_Request = [System.Net.WebRequest]::Create('http://google.com')

$HTTP_Request.Timeout=10000;


$progressPreference = 'Continue'


$HTTP_Response = $HTTP_Request.GetResponse()

$HTTP_Status = [int]$HTTP_Response.StatusCode


If ($HTTP_Status -eq 200) {


Send-MailMessage -To $recipient -From $smtpUser  -Subject $mysubject -Body $mailbodyonline -Credential $Creds -SmtpServer $mailserver -UseSsl -Port 465 -encoding UTF8
}

Else
{
    Send-MailMessage -To $recipient -From $smtpUser  -Subject $mysubject -Body $mailbodyoffline -Credential $Creds -SmtpServer $mailserver -UseSsl -Port 465 -encoding UTF8
}


If ($HTTP_Response -eq $null) { } 


Else { $HTTP_Response.Close() }


Когда я меняю порт с 465 на 587, я получаю следующую ошибку; Send-MailMessage: SMTP-серверу требуется безопасное соединение, или клиент не был аутентифицирован. Ответ сервера был: 5.7.0 Требуется аутентификация.

Любая помощь и совет будут очень благодарны, заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Спасибо за ваш ответ, мне удалось решить проблему. Код не смог получить пароль из текстового файла, мне пришлось воссоздать текстовый файл. заменено.

$ smtpPassword = "C: \ mySriptFile \ siteemailpass.txt"

$ mypassword = ConvertTo-SecureString $ smtpPassword -AsPlainText -Force

$ Creds = New-Object -TypeName System.Management.Automation.PSCredential $ smtpUser, $ mypassword с $ smtpPassword = Get-Content "C: \ mySriptFile \ siteemailpass.txt" | ConvertTo-SecureString

To

$ Creds = New-Object -TypeName System.Management.Automation.PSCredential $ smtpUser, $ smtpPassword

Теперь он работает. Спасибо за быстрый ответ

0 голосов
/ 05 августа 2020

Чтобы отправлять почту через smtp.gmail.com, вам нужно сначала выполнить некоторую настройку Gmail.

  1. Включите «менее безопасные приложения» в панели управления безопасностью Google (похоже, вы уже сделал это).
  2. Убедитесь, что двухфакторная аутентификация отключена . (Я думаю, именно поэтому ваш код получает ошибку)
  3. Убедитесь, что «Captcha» отключена.

Кроме того, вы никогда не должны использовать фигурные «умные кавычки» и в коде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...