Hallo zusammen,
ich möchte eine kleine Anwendung schreiben, die mir anzeigt, ob auf meinem Email-Account ungelesene Nachrichten auf mich warten.
Ich habe es mit Indys TidImap4 und TidPop3 und jeweils Konten bei GMX und Web.de versucht.
POP3:
Mit POP3 hat zwar die Verbindung immer super geklappt, aber leider gibt mir Idpop31.CheckMessages die Anzahl aller Emails auf dem Server zurück, nicht nur der neuen. Um als nur die neuen Emails zu erhalten, müsste ich die Message-IDs lokal speichern und mit den ID's auf dem Server vergleichen. Leider kann diese Methode aber nicht erkennen, ob ich die Email bereits mit meinem Emailprogramm abgerufen habe, oder die Email über Web-Mail schon gelesen habe.
IMAP:
Bei IMAP gibt es ja die Eigenschaft idImap41.MailBox.UnseenMsgs, mit der ich die oben beschriebenen Schwierigkeiten leicht umgehen kann. Leider klappt bei IMAP aber die Authentifizierung nicht zuverlässig. Mit dem unten angegeben Code konnte ich zwar prima von Web.de die Daten auslesen, aber mit GMX klappt es gar nicht, hier bekomme ich schon bei dem Connect eine Exception (EIdClosedSocket).
Kann mir jemand einen Tipp geben, wie ich diese Aufgabe lösen könnte?
Vielen Dank! Zak.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| begin idImap41.Host := 'imap.gmx.net'; idImap41.Username:= UserNr; idImap41.Password:= Pass; if idImap41.Connect(true) then begin showMessage('Connected'); if idImap41.ConnectionState = csAuthenticated then if IdIMAP41.SelectMailBox('inbox') then begin showMessage('unseen:'+IntToStr(idImap41.MailBox.UnseenMsgs)); showMessage('complete:'+IntToStr(IdIMAP41.MailBox.TotalMsgs)); end; idImap41.Disconnect; end; end; |
Moderiert von
matze: Code- durch Delphi-Tags ersetzt