Назад | Перейти на главную страницу

Как почтовый сервер узнает, какого клиента он аутентифицирует?

Мое размещенное в облаке 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, так что вы снова в их власти.