2010-06-08 4 views
6

Ich habe einen offenen Quellcode von CodeProject verwendet, um E-Mails vom Posteingangsserver (POP-Server) zu lesen. Der Code kann an folgender Stelle gefunden werden: http://www.codeproject.com/KB/IP/Pop3MimeClient.aspxE-Mail vom Posteingangsserver (POP) lesen

Bis jetzt funktioniert es gut; Ich kann E-Mails lesen.

Mein Ziel bei der Verwendung dieses Codes war das Abrufen von E-Mails von einem POP-Server und deren Verarbeitung.

Mein Problem ist: Wenn ich Popup-Server von Gmail "pop.gmail.com" benutze und die Anwendung ausführe, erhalte ich nur diejenigen E-Mails, die ich seit dem letzten Ausführen der Anwendung nicht abgerufen habe. Aber wenn ich den POP-Server meines Kunden benutze, wenn ich die Anwendung starte, bekomme ich alle E-Mails auf dem Pop-Server.

Zum Beispiel:
Wenn ich Google Mail-POP-Server verwenden: pop.gmail.com
Ich habe drei E-Mails im Pop-Server. Ich habe die Anwendung nicht ausgeführt. Ich führe die Anwendung zum ersten Mal. Anwendung liest die E-Mail; dieses Mal werde ich alle drei E-Mails bekommen. Ich führe die Anwendung zum zweiten Mal; Meine Anwendung wird dieses Mal keine E-Mails lesen, da ich die 3 bereits gelesen habe. Das ist in Ordnung; Das ist was ich will.

Jetzt sende ich eine E-Mail an pop.gmail.com. Ich führe die Anwendung zum dritten Mal erneut aus; diesmal werde ich nur die gerade eingetroffene E-Mail bekommen, also die vierte. Das ist gutes Benehmen; Das ist was ich will.

Aber wenn ich meine Kunden POP-Server verwenden:
Egal, wie oft ich die Anwendung ausführen, liest sie alle E-Mails in der Mailbox.

Dies wird ein Problem für mich erstellen, weil ich darüber nachdenke, einen Fensterdienst zu erstellen, der E-Mails von Pop-Server lesen und verarbeiten wird. Dieser Dienst wird kontinuierlich ausgeführt. Ich werde E-Mails im POP-Server bearbeiten und dann für etwa 1 Minute schlafen und die E-Mails erneut verarbeiten. Wenn die von CodeProject heruntergeladene Anwendung ständig alle E-Mails liest, kann mein Kundenpostfach in dieser Mailbox wie Tausende von E-Mails haben, also wäre dies für mich nicht machbar.

Gibt es einige Einstellungen, die auf dem POP-Server meines Clients vorgenommen werden müssen, damit meine Anwendung nur die E-Mails abrufen kann, die ich seit der letzten Ausführung des Dienstes nicht gelesen habe?

Antwort

3

Verwenden Sie die Google Mail-Implementierung von POP oder IMAP nicht als kanonisch. Beide Protokolle verhalten sich bei Gmail-Konten anders als bei praktisch jedem anderen Server.

Um Ihre Frage zu beantworten, haben Sie zwei Ansätze, die Sie ergreifen können:

  1. Verfolgen Sie die Nachricht IDs der Nachrichten, die Sie haben sie auf nachfolgende Verbindungen zu sehen und ignorieren (das die Nachrichten hinterlassen auf dem Server für einen anderen Client zum Download).
  2. Geben Sie den Befehl DELE aus, nachdem Sie eine Nachricht heruntergeladen haben, wodurch sie vom Server entfernt wird.
+0

+1 sehr gute Antwort. – adatapost