Как проверить работоспособность SMTP почтового сервиса на почтовом сервере

Я работаю над проектом по автоматической настройке параметров почтового сервера пользователя в Java. Я извлекаю почтовый сервер из его адреса электронной почты и просматриваю записи MX этого почтового сервера, используя DirContext класс с com.sun.jndi.dns.DnsContextFactory,

Тогда я открываю Socket на каждый сервер и тестирование их с помощью HELO Команда и проверка ответов.

Моя проблема в том, что это работает, только когда я тестирую его с незащищенным SMTP-портом 25. Как я могу использовать его с защищенным портом 465?

Я пытался использовать безопасные сокеты с помощью

SSLSocketFactory sslsocketfactory = (SSLSocketFactory)SSLSocketFactory.getDefault();
SSLSocket socket = (SSLSocket)sslsocketfactory.createSocket(mailserver, STANDARD_SMTP_PORT);

Но все соединения получают исключение тайм-аута следующим образом

alt1.gmail-smtp-in.l.google.com. java.net.ConnectException: Operation timed out

Пожалуйста помоги.

Дополнительная информация: я не создаю почтовый клиент. Это должно упростить настройки почтового сервера для уже существующего почтового клиента.

2 ответа

Решение

SMTP-SSL (порт 465) afaik устарел, поэтому вместо того, чтобы пытаться подключиться к сокету ssl, вы фактически подключите "открытый текст" на порт 25 (или 587 для соединений с аутентификацией smtp), но отправите EHLO вместо HELO и посмотрите, Сервер поддерживает STARTTLS, который заменяет устаревший SMTP-SSL. после того, как клиент отправит команду STARTTLS, соединение зашифровано, поэтому порт 25 сам по себе не является "небезопасным"

telnet alt1.gmail-smtp-in.l.google.com 25
Trying 173.194.71.26...
Connected to alt1.gmail-smtp-in.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP i7si4620651lbb.76
EHLO myserver.com
250-mx.google.com at your service, [x.x.x.x]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS                  <<--------- this is what you're looking for
250 ENHANCEDSTATUSCODES
STARTTLS      <<--- client command to actually start encrypting the traffic
220 2.0.0 Ready to start TLS

Вы аутентифицировали программу перед установлением соединения с сервером. Каждый удаленный почтовый сервер должен будет аутентифицировать машину, пытаясь установить сокет-соединение. Если вы используете библиотеку javaMail, например, вам будет предложено добавить имя пользователя и пароль. Вам нужно будет найти обходной путь при использовании простых сокетов в Java

Другие вопросы по тегам