Autor Beitrag
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
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++
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1696
Erhaltene Danke: 1

Win XP, Debian Lenny
Delphi 6 Personal
BeitragVerfasst: 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:
ausblenden 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.