Как почтовые клиенты обрабатывают почту с POP-сервера? - PullRequest
1 голос
/ 20 октября 2011

При написании соединения для подключения к протоколу 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 и реализации, используемые для работы с протоколами.

1 Ответ

4 голосов
/ 20 октября 2011

2-й аргумент команды TOP - неотрицательное количество строк сообщения для загрузки - строки заголовка не включены .

Вы можете использовать команду TOP с 0 в качестве счетчика строк (TOP message_number 0) для загрузки только заголовков сообщений.

...