Получение нескольких клиентов Java pop3 для работы с GMail

StackOverflow https://stackoverflow.com/questions/1201431

Вопрос

Я написал замечательную программу на Java, которая подключается к учетной записи Gmail и загружает приложения, отправленные на нее. Как только вложение было загружено, оно помечается как прочитанное и больше не загружается. Эта программа должна запускаться несколько раз, при этом каждая программа загружает уникальные вложения, чтобы одно вложение никогда не загружалось дважды. Проблема заключается в том, что в данный момент, если вложение имеет приличный размер, одна программа все еще загружает его, когда другой экземпляр подключается, а также начинает загружать вложение, прежде чем оно будет помечено как прочитанное.

Я попытался проверить и установить различные флаги и проверить, открыта ли папка, кажется, ничего не работает. Какие-нибудь решения?

Обновление: спасибо за быстрые ответы, к сожалению, IMAP не подходит по другим причинам.

Это было полезно?

Решение

Как уже упоминалось, POP3 на самом деле не предназначен для такого сценария.

Если вам абсолютно необходимо использовать POP3, я бы предложил загрузить всю электронную почту на промежуточный сервер, который сортирует сообщения и делает их доступными для каждого из других клиентов.

Похоже, вы просто пытаетесь распределить обработку электронных писем. Если это так, вы можете просто подключить каждого клиента к промежуточному серверу для получения следующего доступного сообщения.

Я не уверен, каковы ваши ограничения, но вы можете даже подумать о получении вложений другим способом, кроме электронной почты. Если люди загружают файлы, вы можете настроить веб-форму, которая автоматически отправляет каждый файл на следующий доступный экземпляр вашего приложения для обработки.

Другие советы

Попробуйте вместо этого использовать IMAP - он предназначен для взаимодействия клиент-сервер.

Из RFC1939 (протокол почтового отделения - версия 3):

  

POP3 не предназначен для предоставления   обширные манипуляции с операциями   почта на сервере; обычно почта   скачал и затем удалил. Более продвинутый (и сложный) протокол, IMAP4, обсуждается в RFC1730 . р>

Я не думаю, что POP3 создан для множественного одновременного доступа.

Задайте себе вопрос: действительно ли мне нужно, чтобы несколько процессов обращались к одному и тому же почтовому ящику?

Если вы это сделаете, вам нужно будет найти способ, чтобы эти процессы взаимодействовали друг с другом. Используйте общую базу данных или серверный процесс для координации действий.

IMAP имеет дополнительные параметры, но я не уверен, что вы можете " заблокировать " одно письмо, чтобы пометить его как обрабатываемое.

Если вам нужно остаться с подключением POP3, вы можете сохранить локальную базу данных ранее загруженных идентификаторов сообщений. Затем новые экземпляры могут проверить это перед повторной загрузкой. Лучшее решение - использовать IMAP, поскольку IMAP может устанавливать флажки чтения / непрочитания перед загрузкой.

Вы можете пометить письмо как прочитанное перед началом загрузки, а затем начать загрузку.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top