Почему Send-MailMessage не может отправить с использованием STARTTLS через порт 587 - PullRequest
0 голосов
/ 14 декабря 2018

Почему при отправке сообщения электронной почты из PowerShell с помощью команды Send-MailMessage с использованием флага -Port 587 выдается ошибка.

Команда:

Send-Mailmessage -smtpServer mail.server.com -Port 587 -from "admin@domain.com" -to "user@domain.com" -subject "Test" -body "Test"

Сообщение об ошибке:

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

В документации PowerShell сказано, что добавление -UseSSL должно указывать, что отправляется команда STARTTLS, но даже добавление этого флага может не решить ваших проблем.

Команда:

Send-Mailmessage -smtpServer mail.server.com -Port 587 -UseSsl -from "admin@domain.com" -to "user@domain.com" -subject "Test" -body "Test"

Сообщение об ошибке:

Send-Mailmessage: Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрытоудаленный хост.

1 Ответ

0 голосов
/ 14 декабря 2018

Некоторые SMTP-серверы могли быть защищены только для принятия TLS 1.2 для согласования STARTTLS.Во многих случаях Windows настроена на отправку TLS 1.0 по умолчанию, если указан параметр -UseSSL.

Чтобы заставить Send-MailMessage использовать TLS 1.2, необходимо добавить строку в сценарий перед выполнением Send-MailMessage:

Либо введите:

[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12

или

[System.Net.ServicePointManager]::SecurityProtocol = 'TLS12'
...