Почему не отправляется письмо из PowerShell?

Добрый день!

Есть вот такой скриптик:

$serverSmtp = "smtp.yandex.ru" 
$port = 465
$From = "myemail@yandex.ru" 
$To = "recipient@yandex.ru" 
$subject = "Письмо"
$user = "mylogin"
$pass = "mypassword"


#Создаем экземпляр класса
$mes = New-Object System.Net.Mail.MailMessage

#Формируем данные для отправки
$mes.From = $from
$mes.To.Add($to) 
$mes.Subject = $subject 
$mes.IsBodyHTML = $true 
$mes.Body = "<h1>Тестовое письмо</h1>"

#Создаем экземпляр класса подключения к SMTP серверу 
$smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port)

#Сервер использует SSL 
$smtp.EnableSSL = $true 

#Создаем экземпляр класса для авторизации на сервере яндекса
$smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass);

#Отправляем письмо
$smtp.Send($mes)


Письма не отправляются :( пару писем проскочило, дошли. При этом скрипт долго висит и выдает такую ошибку:

Исключение при вызове "Send" с "1" аргументами: "Время ожидания операции истекло."
строка:30 знак:1
+ $smtp.Send($mes)
+ ~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : SmtpException


Подскажите, что не так со скриптом? Смысл фразы "Время ожидания операции истекло" мне понятен. Не понятно почему несколько раз письма уходили и больше не уходят. И не понятно как это дело отладить и понять где проблема
  • Вопрос задан
  • 2358 просмотров
Решения вопроса 1
Попробуйте изменить порт на 587. 465 порт для SSL - помечен как Deprecated, возможно, Yandex его выпилил.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@azarij
В меру опытный никто
а через другой сервис (гмаил, маил.ру, етц) пробовали ту же процедуру?
учитывая, что этот же скрипт успешно отсылал мыло раньше, проблема может быть не в скрипте.

можно попробовать увеличить timeout:
$smtp.timeout = 1000000
но я сомневаюсь.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы