| Autor |
Beitrag |
Radioactive
      
Beiträge: 179
Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
|
Verfasst: Sa 02.07.05 13:49
Hi Leute!
Ich habe mir einen kleines Programm geschrieben, dass überprüft, ob ich neue E-Mails bekommen habe. Das Programm läuft mit der IdPOP3-Komponente der Indies. Ich überprüfe dann mit CheckMessages, wie viele Nachrichten ich im Posteingang habe. Wie überprüft man nun aber, wie viele ungelesene E-Mails man hat? Muss ich dazu alle Header abrufen bzw. steht diese Information im Header? Oder ist es einfach so, dass mein Programm anhand gleicher Header neue Nachrichten erkennen muss?
Grüße,
_________________ Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: Sa 02.07.05 15:08
Das POP3-Protokoll sieht keine Stati zum Markieren (Un/gelesen, Un/wichtig, nicht/gelöscht) von Nachrichten vor. Darum musst du entweder anhand der Prüfsummen erkennen, ob du die Nachricht schon kennst, die Nachrichten nach dem Download löschen, wobei alle demnächst verfügbaren dann automatisch ungelesen wären oder auf das mit viel besser gefallende IMAP-Protokoll umsteigen.
Gruß,
maxk
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
Radioactive 
      
Beiträge: 179
Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
|
Verfasst: So 03.07.05 10:09
Vielen Dank! Leider erlaubt z.B. GMX bei kostenlosen Accounts keinen IMAP-Abruf! Ich werde dann mal versuchen, es mit Prüfsummen zu lösen.
Danke,
_________________ Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
|
|
DarkLord05
      
Beiträge: 449
WinXP Pro SP2
Opera; Delphi 3 Pro; Delphi 2005, Turbo Delphi, dev-c++, Eclipse, MS Visual Studio .NET 2003, MS Visual C++
|
Verfasst: So 03.07.05 10:18
Bin mirnicht sicher ob ihr das mit der Prüfsumme meint aber ich hätt da auch ne Idee:
Du liest einfach 1x alle, dann speicherst du die anzahl der mail irgendwo (Registry, *.ini...). Immer wenn dein Programm dann gucken soll ob neue Mails da sind, vergleicht es die anzahl der mails (mit dem alten check) mit den neuen, wenn die anzahl der mails jetzt größer ist, dann hast du ne neue E-Mail (oder mehrere), kannst ja dann den unterschied ausrechenen lassen.
|
|
Radioactive 
      
Beiträge: 179
Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
|
Verfasst: So 03.07.05 10:23
Und was ist, wenn ich eine Mail auf dem Server lösche, was ich ja manchmal mache?! Dann sagt mein Programm, ich hätte eine neue E-Mail, obwohl das nicht so ist.
Man könnte statt Prüfsummen vielleicht nuch die Header vergelchen, aber dann kann jeder meine Header lesen und es braucht mehr Speicherplatz.
_________________ Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
Zuletzt bearbeitet von Radioactive am So 03.07.05 10:24, insgesamt 1-mal bearbeitet
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: So 03.07.05 10:24
Wenn aber ein anderes Programm inzwischen die Mails abgeholt hat (oder GMX sie gelöscht hat, weil sie zu alt waren), dann funktioniert das nichtmehr. POP3 bietet die Möglichkeit mit den Kommando UIDL die Checksummen (eigentlich sind es mehr eindeutige Werte) aller Nachrichten zu erfragen. Diese ändern sich niemals und sollen (zumindest theoretisch) eindeutig sein.
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
Radioactive 
      
Beiträge: 179
Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
|
Verfasst: So 03.07.05 10:25
Unterstützt Indy POP3 das UIDL-Kommando?
OK, hat sich erledigt - Indy POP3 unterstützt es.
_________________ Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
|
|
maxk
      
Beiträge: 1696
Erhaltene Danke: 1
Win XP, Debian Lenny
Delphi 6 Personal
|
Verfasst: So 03.07.05 10:30
Das weiss ich ehrlich gesagt nicht, da ich sowieso lieber direkt mit TidTCPClient und TidTCPServer arbeite. Aber wenn nicht, kannst du direkt arbeiten:
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| POP3.WriteLn('UIDL'); Messages.Clear; if copy(POP3.ReadLn,1,1)='+' then repeat Msg:=POP3.ReadLn; if Msg<>'.' then Messages.Add(Msg); until Msg='.' else ShowMessage('Server unterstützt UIDL nicht!'); | Der Code ist nicht für ein Copy & Paste geeigent, ungetestet und soll eigentlich nur mein Gedankengang zeigen...
Gruß,
maxk
// Edit: Menno, schonwieder zu langsam 
_________________ Ein Computer wird das tun, was Du programmierst - nicht das, was Du willst.
|
|
|