Мои собственные эксперименты показывают, что класс .NET SmtpClient фактически не поддерживает SMTP через SSL (SMTPS). Переключение флага .EnableSsl на ваш клиентский объект вместо этого заставит клиента использовать STARTTLS.
Это неудивительно, учитывая, что SMTPS устарел в пользу STARTTLS по ряду причин, большинство из которых связаны с бесшовной интероперабельностью между новыми и старыми клиентами и серверами.
SMTPS: Клиент открывает TCP-соединение с целевым сервером. Эти два запускают SSL-подтверждение сразу, а затем переходят через этот SSL-туннель, используя обычный SMTP-протокол (EHLO, AUTH и т. Д.).
STARTTLS: Клиент открывает TCP-соединение с целевым сервером. Клиент выдает EHLO, а затем STARTTLS. Это делается с использованием простого текста. Команда STARTTLS предлагает клиенту и серверу начать квитирование SSL по уже открытому сокету. Вся будущая коммуникация (команда AUTH и за ее пределами) осуществляется через уже установленный SSL-туннель.
Возникла проблема, когда объект SmtpClient подключается к серверу, ожидающему SMTPS.Клиент отправит EHLO после открытия своего сокета вместо того, чтобы немедленно начать квитирование SSL, что приведет к тому, что сервер будет считать, что квитирование SSL не выполнено, и соединение остановится или умрет. Клиент задержит тайм-аут, и вы получите исключение SmtpException.
Любой SMTP-сервер, прослушивающий порт 465, вероятно, ожидает SMTPS. SMTPS имеет собственный выделенный порт и необязательно поддерживает STARTTLS, потому что по определению STARTTLS сервер должен принимать и отвечать на команды EHLO и STARTTLS перед использованием SSL.
SMTP-серверы на традиционных портах, таких как 587 или 25, однако имеют возможность поддерживать STARTTLS, если серверное программное обеспечение поддерживает его и администратор службы, чтобы включить его. Именно поэтому многие люди на интернет-публикации об этой проблеме отметили, что они в состоянии получить SmtpClient работать, изменяя порт от 465 до 587.
Короткая версия: Класс SmtpClient поддерживает STARTTLS и не SMTP через SSL (SMTPS). Если вы хотите использовать флаг .EnableSsl на объекте клиента, убедитесь, что сервер и порт, к которому вы подключаетесь, поддерживают STARTTLS. Если сервер и порт вместо этого прослушивают и ожидают истинный SMTPS, клиентский объект не сможет успешно подключиться, и отправка не удастся. Порт 465 используется почти исключительно для SMTPS. Порты 25 и 587 используются для поддержки SMTP или SMTP с поддержкой STARTTLS при наличии STARTTLS (дополнительно).
Каков тип исключения? –
@KarlAnderson это SMTPException – User7291
Я пробовал тестировать порты, но все еще nth:/ – User7291