MailConnectException: не удалось подключиться к хосту, порту — ограничение на количество запросов POP3, которые могут быть выполнены?

#java #jakarta-mail

#java #джакарта-почта

Вопрос:

Я возился с JavaMail API и постоянно сталкивался с MailConnectException и SocketTimeoutException вскоре после попытки быстрого открытия многих сеансов (~ 50) одновременно (т. Е. пытался войти во множество разных почтовых учетных записей одновременно).

Я никогда не сталкивался с этими ошибками при входе в одну учетную запись одновременно с промежутками примерно 3-5 секунд между запросами на вход.

Существует ли квота, которую Yahoo, Google и другие почтовые провайдеры устанавливают на количество рукопожатий, которые могут быть выполнены за заданный промежуток времени для запросов IMAP, POP3 и SMTP? Если да, есть ли какой-либо способ обойти это ограничение?

Или есть что-то еще, что может быть причиной MailConnectException?

Комментарии:

1. Почти каждый провайдер вводит ограничения на использование API для своих сервисов. В зависимости от поставщика, они будут сообщаться в их документации API или не будут сообщаться вообще, и вам придется узнавать о них методом проб и ошибок и внешними ресурсами. Последнее иногда может расстраивать.

Ответ №1:

Провайдеры обычно реализуют как минимум 3 уровня защиты сервиса:

  • Сетевой уровень; Большинство из них реализуют защиту от SYN-флудов.
  • Аутентификация; Большинство из них будут реализовывать защиту от злоупотребления аутентификацией. Частота / rate аутентификации, вероятно, здесь является лишь верхушкой айсберга. Репутация, разнообразие геолокации, шаблоны преобразования идентификатора пользователя в IP и другие факторы, вероятно, более распространены для защиты авторизации.
  • Уровень сервиса / протокола; Большинство из них реализуют защиту, специфичную для протокола, от таких вещей, как нарушения rfc, массовое потребление полосы пропускания и злоупотребление / спам.

Лучший способ избежать их — это кодировать в соответствии с опубликованными рекомендациями (например, rfc2683) и таким образом, чтобы казалось, что у вас есть четко понятная цель для выполнения того, что вы делаете. Например:

  • POP3 действительно не имеет хорошего варианта использования для необходимости 50 одновременных подключений
  • SMTP / отправка с 50 одновременными подключениями очень похожа на рассылку спама
  • IMAP с 50 одновременными подключениями, возможно, понятен, если клиент хочет выполнить сеанс для каждой папки, а их 50 папок … но даже тогда провайдеры могут отказаться от поддержки этого варианта использования и в любом случае ограничить одновременные подключения.