Не найдено новых сообщений, полученных после установления соединения

Сценарий заключается в том, что служба Windows подключается к учетной записи POP3 outlook.com или gmail.com с использованием OpenPOP. Он находит существующие электронные письма, если они есть (т.е. client.getMessageCount() возвращает значение больше нуля).

Служба поддерживает соединение открытым и проверяет наличие новых сообщений.

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

Я надеюсь, что у кого-то была такая же проблема.

Я не могу решить эту проблему путем более частого всплывающего подключения / переподключения, поскольку некоторые поставщики (например, outlook.com) имеют ограничения по времени между подключениями.

1 ответ

Решение

В спецификации POP3 упоминается, что почтовый ящик заблокирован, пока клиент его открывает. Поэтому сообщения не могут появляться.

Подумайте об этом сценарии: большинство серверов назначают новым сообщениям низкий номер сообщения. Вы только что получили все номера сообщений:

1 - Foo message
2 - Bar message

Теперь вы хотите удалить сообщение Foo, но сервер обновляет maildrop так:

1 - Baz message
2 - Foo message
3 - Bar message

Вы отправляете команду DELE 1, и теперь отметили Baz, а не сообщение Foo, которое нужно удалить. Протокол POP3 был разработан, когда Интернет был редким ресурсом, и вы не всегда были подключены. Если вы хотите получать живые обновления для maildrop, вам следует использовать гораздо более новый протокол IMAP.

Если вы продолжаете использовать POP3, вам придется отключиться и подключиться снова, чтобы иметь обновления. Обратите внимание, что большинство серверов не позволяют клиентам продолжать быстрое подключение / отключение, они просто отклонят вашу аутентификацию, если вы подключаетесь слишком часто.

Также обратите внимание, что Gmail имеет странную реализацию POP3. См. Какие функции нестандартного поведения демонстрирует Gmail, когда он программно используется в качестве сервера POP3?

Другие вопросы по тегам