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

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

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

0
bradstoke 29 Июл 2009 в 20:21

6 ответов

Лучший ответ

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

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

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

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

1
rob 29 Июл 2009 в 16:51

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

4
Thorbjørn Ravn Andersen 29 Июл 2009 в 16:26

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

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

2
McDowell 29 Июл 2009 в 16:35

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

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

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

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

2
Stroboskop 29 Июл 2009 в 16:37

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

0
jsight 29 Июл 2009 в 16:37

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

0
aperkins 29 Июл 2009 в 16:55