Мое размещенное в облаке java-приложение успешно аутентифицируется на нашем почтовом сервере на другом хосте (управляемом VPS) на mail.example.com. Сервер mail.example.com принимает электронную почту для наших пользователей по адресу user@example.com. Однако ретрансляция запрещена, и попытки отправить письмо на адрес something@gmail.com отклоняются.
Тем не мение, мой вопрос не «Как мне это исправить?» Я почти уверен, что это та же проблема, что и эта: Как исправить Postfix "Relay Access Denied"?. Я оставлю это администраторам, которые управляют mail.example.com - возможно, они добавят IP-адрес хоста приложения в параметр mynetworks в файле main.cf.
У меня такой вопрос: Как почтовый сервер узнал, что приложение java не является моим почтовым клиентом? Я протестировал настройку электронной почты приложения java с идентификатором пользователя и паролем, которые я использую каждый день для своей электронной почты. Я использую ноутбук и подключаюсь к электронной почте из любого места - в кафе, дома, в отелях и т. Д.
Что отличает мое Java-приложение от меня на ноутбуке, подключающемся к Starbucks?
Вы как бы коснулись этого в своем комментарии выше; По сути, первое, что нужно сделать при подключении, - это подать команду HELO (smtp) или EHLO (esmtp) от клиента к серверу. Проблема в том, что прямо сейчас вы не знаете, что example.com имеет в своем файле конфигурации почты.
То, что я сделал бы для отладки, - это настроить ваш собственный MTA (exim, postfix и т. Д.) Где-нибудь на сервере и запустить вывод журнала, чтобы захватить ваш обычный клиент и сеансы отправки вашего java-приложения и сравнить, что каждый MUA отправляет на сервер, особенно это поле HELO / EHLO. В качестве альтернативы, если настройка сервера быстрой почты для вас слишком сложна, вы можете использовать tcpdump на хосте, захватывать исходящие необработанные пакеты и просматривать их в Wireshark для чтения полезных данных.
В качестве примера, вот как выглядит стандартная конфигурация Exim в отношении этой информации:
# Hosts are required to say HELO (or EHLO) before sending mail.
# So don't allow them to use the MAIL command if they haven't
# done so.
deny condition = ${if eq{$sender_helo_name}{} {1}}
message = Nice boys say HELO first
# Use the lack of reverse DNS to trigger greylisting. Some people
# even reject for it but that would be a little excessive.
warn condition = ${if eq{$sender_host_name}{} {1}}
set acl_m_greylistreasons = Host $sender_host_address lacks reverse DNS\n$acl_m_greylistreasons
accept
Вы также можете проверить, использует ли ваше приложение Java тот же тип аутентификации, что и ваш обычный клиент - возможно, ваш почтовый сервер по-разному реагирует, если вместо, скажем, CRAM-MD5 используется стиль PLAIN или LOGIN. Это зависит исключительно от администратора MTA, так что вы снова в их власти.