При написании соединения для подключения к протоколу POP3 через сокеты я мог использовать команду LIST
для получения списка электронных писем.Предположим, я выполняю команду LIST
, она возвращает 3700 писем в списке.Я прочитал весь ответ в буфер.Теперь я хочу перечислить эти письма по одному в моем приложении.
LIST
1 1472
...
3696 3224
3697 5998
3698 1970
3699 1425
3700 129345
.
Я имел в виду 2 идеи.Во-первых, я мог бы построчно проанализировать ответ и получить номер сообщения.И для каждой строки я получаю номер сообщения, скажем, # 3700, я делаю TOP 3700 10
.Так что это будет читать 10 строк заголовков почты.Сначала я подумал, что это будет хорошо, потому что мне не нужно загружать всю почту только для темы, имени, адреса и некоторого краткого содержания письма;Я мог бы сохранить трафик.Но проблема не в том, что все электронные письма имеют только 10 строк заголовков.Некоторые электронные письма имеют очень длинные заголовки, а другие очень короткие.Трудно определить, сколько строк читать.Кроме того, поскольку электронная почта не загружается полностью, когда пользователь хочет прочитать полную почту, я должен отправить еще одну команду RETR
, чтобы получить всю электронную почту.Затем предположим, что было другое подключение к учетной записи POP, и удалил сообщение # 3700.Мое приложение все еще распознает электронную почту по этому «неуникальному» идентификатору сообщения.Когда мое приложение хочет загрузить электронное письмо и отправить RETR 3700
, оно ответит -ERR Server Unavailable. 21
Вторая идея, которую я имею, состоит в том, чтобы использовать RETR 3700
.Это прочитало бы всю почту, только для той немногой информации, чтобы перечислить это в приложении.Я подумал, что это глупо, потому что если в почтовом ящике много писем, я извлекаю весь почтовый ящик в память приложения!
Каковы общие / умные способы, которыми почтовый клиент будет обрабатывать письма изPOP-сервер?
PS: я не использую JavaMail, потому что намерение состоит в том, чтобы узнать больше о том, как работает протокол POP и реализации, используемые для работы с протоколами.