TIdPOP3.UIDL() - zwraca posrotowane uidl'e ?

0

Cześć

Mam pytanie do tych którzy bawili się protokołem POP3 przy użyciu Indy (lub innych komponentów). Ostatnio przyjąłem pewne założenie - mianowicie w aplikacji pobieram wszystkie UIDL'e (POP3.UIDL) a następnie iterując je od końca wyświetlam 15 wiadomości bazując na tych uidl'ach (pomijając te które mam zapisane żeby ich nie wyświetlać). Moim celem jest wyświetlenie ostatnich 15 wiadomości. Na większości serwerów pocztowych to działa, ale np na wp.pl nie. Przeanalizowałem zwracaną listę i wygląda to bardzo dziwnie - żadnego porządku. Na >1000 wiadomości, kilka wiadomości z wczoraj wpadło jako pierwsze wiadomości. Specyfikacja nie nie mówi o kolejności tych UIDL'i.

Przykład:

1 1363959240.WYFBpm.12,S=87153 < wiadomość z wczoraj
2 1363945484.zMHD6P.17,S=1858 < wiadomość z wczoraj
3 1363890648.993148_S1,S=64316
4 1363875534.tg00Ua.7,S=2452
5 1363853163.993148_S0,S=49233
...
992 1137136407.13177.smtp.mta-1.poczta.srv-NOSPAM,S=2100
993 1136545839.7746.smtp.mta-5.poczta.srv-NOSPAM,S=3775
994 1133729837.7572.smtp.mta-8.poczta.srv-NOSPAM,S=8039
995 1130321671.10229.smtp.mta-1.poczta.srv-NOSPAM,S=2550
996 1128595695.11636.smtp.mta-11.poczta.srv-NOSPAM,S=7533
997 1127750853.5175.smtp.mta-8.poczta.srv-NOSPAM,S=2453
998 1127282831.21230.smtp.mta-9.poczta.srv-NOSPAM,S=6608
999 1121853773.19503.smtp.mta-9.poczta.srv-NOSPAM,S=3845
1000 1111673894.17234.smtp.mta-10.poczta.srv-NOSPAM,S=6201
1001 1364022799.118831_S0,S=56006 < wiadomość z dzis
1002 1363985157.118831_S1,S=48123 < wiadomość z wczoraj
1003 1363964460.118831_S2,S=46696 < wiadomość z wczoraj
1004 1364025462.Y50VtY.14,S=137436 < wiadomość z dzis
1005 1363863629.f03SEO.8,S=137464 < wiadomość z przedwczoraj
1006 1363863430.BQZUq0.8,S=138661 < wiadomość z przedwczoraj
1007 1363851130.Rfl76J.18,S=136693 < wiadomość z przedwczoraj
1008 1363824905.4H1EOB.5,S=3924 < wiadomość z przedwczoraj
1009 1363943422.sLODuU.3,S=137657 < wiadomość z wczoraj
1010 1363940059.2ObfGz.12,S=137071 < wiadomość z wczoraj

Czy coś robię źle ?

bk

0

A nawet zakładając że założyłem źle - to jaki sens mają te message numbers przed każdym uidlem ? Co to znaczy wiadomość o numerze 1 ? Na logikę powinna to być pierwsza wiadomość na skrzynce no nie ?

RFC1939:

UIDL [msg]

  Arguments:
      a message-number (optional), which, if present, may NOT
      refer to a message marked as deleted

  Restrictions:
      may only be given in the TRANSACTION state.

  Discussion:
      If an argument was given and the POP3 server issues a positive
      response with a line containing information for that message.
      This line is called a "unique-id listing" for that message.

      If no argument was given and the POP3 server issues a positive
      response, then the response given is multi-line.  After the
      initial +OK, for each message in the maildrop, the POP3 server
      responds with a line containing information for that message.
      This line is called a "unique-id listing" for that message.

      In order to simplify parsing, all POP3 servers are required to
      use a certain format for unique-id listings.  A unique-id
      listing consists of the message-number of the message,
      followed by a single space and the unique-id of the message.
      No information follows the unique-id in the unique-id listing.

      The unique-id of a message is an arbitrary server-determined
      string, consisting of one to 70 characters in the range 0x21
      to 0x7E, which uniquely identifies a message within a
      maildrop and which persists across sessions.  This
      persistence is required even if a session ends without
      entering the UPDATE state.  The server should never reuse an
      unique-id in a given maildrop, for as long as the entity
      using the unique-id exists.

      Note that messages marked as deleted are not listed.

      While it is generally preferable for server implementations
      to store arbitrarily assigned unique-ids in the maildrop,
      this specification is intended to permit unique-ids to be
      calculated as a hash of the message.  Clients should be able
      to handle a situation where two identical copies of a
      message in a maildrop have the same unique-id.
0

1010 1363940059.2ObfGz.12,S=137071 < wiadomość z wczoraj
a to nie jest czas w formacie Unix timestamp?

0
kAzek napisał(a):

1010 1363940059.2ObfGz.12,S=137071 < wiadomość z wczoraj
a to nie jest czas w formacie Unix timestamp?

No może i jest. Generalnie jak zrobiłem tak że wyciąłem numery wiadomości i posortowałem alfabetycznie to co zostało, to sortuje się tak jak trzeba - zgodnie z czasem wysłania.

Tylko teraz mam zagwozdkę - czy zawsze trzeba tak robić - sortować ? Czy dla innych serwerów pocztowych to też zadziała ? OIDP format UIDL'i jest przeróżny są też np takie:

1 43843aab0000004c

bk

0

Czy trzeba sortować to nie jestem pewien ale raczej tak bo u mnie np. sprawdziłem (Indy 10) na WP , Onet i GMail i okazuje się że na Onet i GMail starsze wiadomości są na początku listy a na WP na końcu. Jeżeli posortuję po UIDL jest tak samo na wszystkich 3 testowanych. Tylko dziwne u mnie z WP nie było problemu z tym ze część nowych wiadomości jest na początku a część na końcu tylko kierunek sortowania nie był taki sam po posortowaniu wg. UIDL jest ok.

0
kAzek napisał(a):

... po posortowaniu wg. UIDL jest ok.

Oczywiście masz na myśli posortowanie po wycięciu numerów wiadomości z początku każdego uidl'a ?

bk

1 użytkowników online, w tym zalogowanych: 0, gości: 1