none
PowerShell -> SMTP -> Аутентификация -> SSL - не работает.

    Вопрос

  • Здравствуйте.

    Задача: ежедневно отправлять по электронной почте сообщения с помощью скрипта.

    Условия: SMTP-сервер требует аутентификации, требует SSL и работает на 465-м порту.

    Я использую скрипт Василия Гусева Send-SmtpMail.ps1.
    Для того, чтобы соединяться на 465-й порт, я добавил в него строку:

    $SmtpClient.Port = 465

    Не работает.
    Причем, когда я использовал анонимный SMTP-сервер без поддержки SSL и аутентификации, скрипт отрабатывал великолепно.
    При использовании сервера с SSL и аутентификацией я получаю ситуацию, когда клиент (т.е. PowerShell-скрипт) успешно открывает TCP-соединение, но не посылает "SSL Client Hello" на сервер. В результате SSL-соединение не устанавливается и PowerShell вываливает ошибку:

    Исключение при вызове "Send" с "1" аргументами: "Время ожидания операции истекло."
    В C:\Scripts\Send-SmtpMail.ps1:31 знак:17
    + $smtpclient.Send( <<<< $Message)

    То же самое происходит при попытке отправки письма через Database Mail на MS SQL Server 2008. TCP-соединение устанавливается, а SSL-нет, после чего TCP-соединение успешно отваливается.

    При отправке из любого почтового клиента с аналогичными настройками сервера сообщения уходят великолепно.

    -----------

    Подскажите, в какую сторону копать?


    22 января 2009 г. 11:09

Ответы

  • Проблема решилась довольно просто (правда после двух дней штудирования матчасти).

    На 465-м порту сервер не выдавал стандартное SMTP-сообщение 220, и для соединения на этот порт надо было сначала установить SSL-соединение, а уже внутри этого соединения общаться с SMTP-сервером.

    Но на 25-й порт, как оказалось, тоже можно соединяться. Smile
    Теперь скрипт работает.

    Параллельно удалось выяснить, что Cisco IOS при включенном ip inspect smtp заменяет все исходящие EHLO на XXXX, в результате чего от сервера естественно приходит Unknown Command, и клиент переключается в HELO-режим. MS Office Outlook такую манипуляцию делать не умеет, и закрывает соединение, не отправляя почту. Решается заменой ip inspect smtp на ip inspect esmtp.

    P.S. Если вдруг на этом форуме нельзя про Cisco писать, пусть модераторы сотрут эту часть ответа.

    Спасибо.
    23 января 2009 г. 11:31

Все ответы

  • Secure SMTP (ESMTP) работает либо через 25, либо через 587 порт.

    Только что проверил с яндексом и гуглом, всё хорошо.

     

    Более подробно можно прочитать тут http://www.chebucto.ns.ca/~rakerman/port-table.html

    23 января 2009 г. 4:50
    Модератор
  • Проблема решилась довольно просто (правда после двух дней штудирования матчасти).

    На 465-м порту сервер не выдавал стандартное SMTP-сообщение 220, и для соединения на этот порт надо было сначала установить SSL-соединение, а уже внутри этого соединения общаться с SMTP-сервером.

    Но на 25-й порт, как оказалось, тоже можно соединяться. Smile
    Теперь скрипт работает.

    Параллельно удалось выяснить, что Cisco IOS при включенном ip inspect smtp заменяет все исходящие EHLO на XXXX, в результате чего от сервера естественно приходит Unknown Command, и клиент переключается в HELO-режим. MS Office Outlook такую манипуляцию делать не умеет, и закрывает соединение, не отправляя почту. Решается заменой ip inspect smtp на ip inspect esmtp.

    P.S. Если вдруг на этом форуме нельзя про Cisco писать, пусть модераторы сотрут эту часть ответа.

    Спасибо.
    23 января 2009 г. 11:31
  • А можете поточнее написать как сначала установить ssl-соединение, а потом через него отправлять? Заранее спасибо. Для mail.ru - изменил порт на 567 (перешёл на tls) и всё заработало, но хотелось бы на 465 остаться.
    • Изменено FeaN0r 13 апреля 2018 г. 7:30 Добавлено альтернативное решение
    13 апреля 2018 г. 7:23