Назад | Перейти на главную страницу

Проблема с протоколом POP3 и iPhone

Мы без проблем запускаем собственный pop3-сервер уже много лет. Но сейчас некоторые клиенты пытаются использовать айфоны, и возникает загадочная несовместимость. Для писем более определенного размера (для тестов мы используем около 32 КБ) iPhone просто извлекает заголовки и первые 40 строк с помощью TOP команда. Он отображает эти строки: «Это сообщение загружено только частично» и кнопку «Загрузить оставшиеся».

С нашим сервером он никогда не получает сообщение полностью. Нажатие кнопки "Скачать осталось" просто отправляет STAT команда. На тестовом сервере, на котором запущен сервер Dovecot pop3, он отправляет RETR как и ожидалось, и отображает полное сообщение. Я также контролировал обмен протоколами с помощью тестовой учетной записи AOL, которая работает, как ожидалось.

Я, очевидно, не ожидаю, что кто-то будет отлаживать наш код сервера pop3, но есть ли у кого-нибудь ключ к пониманию того, что может видеть iPhone, что могло бы заставить его вести себя таким образом - никогда не отправлять RETR? Я сравнил протоколы обмена и не вижу практической разницы между работающими серверами и нашими. Я много раз проверял формат сообщения (строки заголовка + пустая строка + тело сообщения + одна точка в строке для завершения).

Вот протокол обмена для нашего сервера:

+OK MultiBase POP3 Server Ready
USER stuff3@example.net
+OK Name is a valid mailbox
PASS a
+OK Mailbox locked and ready
STAT
+OK 1 34572
UIDL
+OK
1 20110607123720000006
.
LIST
+OK 1 messages (34572)
1 34572
.
TOP 1 40
+OK message top follows
[--message headers + 40 lines--]
.
[--Download remaining button hit--]
STAT
+OK 1 34572

Вот протокол обмена для сервера Dovecot:

+OK Dovecot ready.
USER stuff
+OK
PASS a
+OK Logged in.
STAT
+OK 1 34732
UIDL
+OK
1 000000014dee8328
.
LIST
+OK 1 messages:
1 34732
.
TOP 1 40
+OK
[--message headers + 40 lines--]
.
[--Download remaining button hit--]
STAT
+OK 1 34732
RETR 1
+OK 34732 octets
[--full message--]
.

У iPhone, похоже, есть привычка не закрывать соединение в ближайшее время, поэтому нет QUIT команда в этих обменах.

Любые предложения или подсказки приветствуются.

Если iPhone корректно работает с сервером Dovecot, то я сомневаюсь, что проблема связана с iPhone. Я бы посоветовал установить программу захвата пакетов на сервере, запустить захват и наблюдать за обменом данными между iPhone и сервером в поисках подсказок. Возможно, сервер завершает сеанс TCP до того, как с iPhone будет получена команда RETR. Поищите RST с сервера или другой анамолии.