Вот таки решился написать почтовик, подскажите, насколько корректно использование команды UIDL. В стандартах сказано, что её поддержка необязательна. Но иначе как организовать корректный приём и удаление писем с сервера, если хранить сообщения на сервере некоторое время?
Здравствуйте, ArtyomMirgorodsky, Вы писали:
AM>Вот таки решился написать почтовик, подскажите, насколько корректно использование команды UIDL. В стандартах сказано, что её поддержка необязательна. Но иначе как организовать корректный приём и удаление писем с сервера, если хранить сообщения на сервере некоторое время?
Если сервер не поддерживает UIDL (что в настоящее время встречается нечасто), то можно делать хэш на основе заголовка письма, например. И по нему сравнивать. Заголовок письма, если не ошибаюсь, можно запросить
Здравствуйте, Flamer, Вы писали:
F>Если сервер не поддерживает UIDL (что в настоящее время встречается нечасто), то можно делать хэш на основе заголовка письма, например. И по нему сравнивать. Заголовок письма, если не ошибаюсь, можно запросить TOP {MESSAGE_NUM} 0
TOP также дополнительная команда.
Люблю вспоминать герб советского союза — серп и молот — закоси и забей.
Здравствуйте, ArtyomMirgorodsky, Вы писали:
AM>Здравствуйте, Flamer, Вы писали:
F>>Если сервер не поддерживает UIDL (что в настоящее время встречается нечасто), то можно делать хэш на основе заголовка письма, например. И по нему сравнивать. Заголовок письма, если не ошибаюсь, можно запросить TOP {MESSAGE_NUM} 0
AM>TOP также дополнительная команда.
Ну и что? Вы ведь все равно будете посылать команду UIDL, не так-ли? Если сервер вернет код ошибки — вызовите TOP. Делов-то на 5 минут и всего одна лишняя команда... Реализация которой, впрочем, в дальнейшем может принести только дополнительные бонусы (например, предпросмотр первых строк письма или анализ заголовков).
AM>Люблю вспоминать герб советского союза — серп и молот — закоси и забей.
Здравствуйте, Flamer, Вы писали:
F>Ну и что? Вы ведь все равно будете посылать команду UIDL, не так-ли? Если сервер вернет код ошибки — вызовите TOP. Делов-то на 5 минут и всего одна лишняя команда... Реализация которой, впрочем, в дальнейшем может принести только дополнительные бонусы (например, предпросмотр первых строк письма или анализ заголовков).
AM>>TOP также дополнительная команда.
И если не поддерживается UIDL не будет поддерживаться и TOP
Здравствуйте, ArtyomMirgorodsky, Вы писали:
AM>Здравствуйте, Flamer, Вы писали:
F>>Ну и что? Вы ведь все равно будете посылать команду UIDL, не так-ли? Если сервер вернет код ошибки — вызовите TOP. Делов-то на 5 минут и всего одна лишняя команда... Реализация которой, впрочем, в дальнейшем может принести только дополнительные бонусы (например, предпросмотр первых строк письма или анализ заголовков).
AM>>>TOP также дополнительная команда. AM>И если не поддерживается UIDL не будет поддерживаться и TOP
Какое счастье, что вы неправы С чего вы это взяли? Отсутствие поддержки одного не означает отсутствие реализации поддержки другого.
Вот в чем вы правы, так это в том, что TOP, как и UIDL — это опциональные команды. Так что, проверять-то придется по-любому. Может быть случай, когда будет TOP, но не будет UIDL. И наоборот, естественно.
Я искренне предложил нормальный, имхо, способ. Больше писать сюда не буду — обиделся на минус
Здравствуйте, Flamer, Вы писали:
F>Какое счастье, что вы неправы С чего вы это взяли? Отсутствие поддержки одного не означает отсутствие реализации поддержки другого.
F>Вот в чем вы правы, так это в том, что TOP, как и UIDL — это опциональные команды. Так что, проверять-то придется по-любому. Может быть случай, когда будет TOP, но не будет UIDL. И наоборот, естественно.
F>Я искренне предложил нормальный, имхо, способ. Больше писать сюда не буду — обиделся на минус
Не обижайся, может я не привык к здешним правилам. Вспомни, как звучал мой вопрос, корректно ли твоё предложение? 100% ли это выход? Нет. Да можно проверять и нужно проверять и ту и ту возможность. Но это не универсальный вариант. Зачем тогда писать лишний код, если будет ещё 3 общий вариант?
Здравствуйте, ArtyomMirgorodsky, Вы писали:
F>>Какое счастье, что вы неправы С чего вы это взяли? Отсутствие поддержки одного не означает отсутствие реализации поддержки другого.
F>>Вот в чем вы правы, так это в том, что TOP, как и UIDL — это опциональные команды. Так что, проверять-то придется по-любому. Может быть случай, когда будет TOP, но не будет UIDL. И наоборот, естественно.
F>>Я искренне предложил нормальный, имхо, способ. Больше писать сюда не буду — обиделся на минус
AM>Не обижайся, может я не привык к здешним правилам. Вспомни, как звучал мой вопрос, корректно ли твоё предложение? 100% ли это выход? Нет. Да можно проверять и нужно проверять и ту и ту возможность. Но это не универсальный вариант. Зачем тогда писать лишний код, если будет ещё 3 общий вариант?
3 общий вариант — это получать все письмо целиком, других нет . В принципе можно получив строку с MessageID прервать связь, но за такие штучки можно получить по шапке от сервера, в том смысле, что некоторые реализации POP3 после разрыва связи на некоторое время блокируют аккаунт.
+ есть команда CAPA, если она поддерживается(что не факт ), то не нужно будет пробовать UIDL & TOP.
Если ни UIDL ни TOP не поддерживаются, можно анализировать список, возвращаемый LIST, и, если в нем появляется нечто новое, затягивать. Не исключена ситуация, что придет сообщение, размер которого совпадает с размером уже имеющегося сообщения, тогда, видимо, придется тянуть оба сообщения и выяснять кто есть кто...
[]
AM>Не обижайся, может я не привык к здешним правилам.
Да я не обижаюсь — я смайлик поставил
AM>Вспомни, как звучал мой вопрос, корректно ли твоё предложение? 100% ли это выход? Нет. Да можно проверять и нужно проверять и ту и ту возможность. Но это не универсальный вариант. Зачем тогда писать лишний код, если будет ещё 3 общий вариант?
Вот что интересно: изначально _грамотный_ вариант реализации, охватывающий все возможные настройки серверов, получил минус, а голословное (прости, PK Sly, но это только твои слова, с коими я, впрочем, согласен) утверждение получило награду в два балла.
Еще раз убеждаюсь — лень — двигатель прогресса Тогда вам надо было поставить вопрос по другому:
Все-ли POP3-сервера поддерживают UIDL, а то не хочется напрягаться :))