2009-09-23 1 views
29

Ich erhalte E-Mails vom Server mit dem IMAP-Protokoll wie beschrieben here. Das funktioniert sehr gut und ich kann die E-Mails und Anhänge auf der Festplatte speichern.Lösche E-Mail auf Server mit javax.mail

Frage: Habe ich die Möglichkeit, Dateien aus dem Server zu löschen, so dass sie nicht mehr verfügbar sind, wenn ein Client alle E-Mails zu empfangen versucht? Wenn ja, bitte sag mir wie.

Antwort

58

Sie sollten dies über die Standard-APIs tun können.

Zuerst müssen Sie einen Verweis auf die Message (oder Nachrichten), die Sie löschen möchten - wenn Sie sie erfolgreich lesen, dann können Sie dies bereits tun. Jetzt gibt es keinen expliziten delete() Betrieb, aber Sie können eine Nachricht markieren, wie wie so gelöscht:

message.setFlag(Flags.Flag.DELETED, true); 

Dies wird die Nachricht markiert als gelöscht (die in der Regel ist das, was ein Löschvorgang in einem Desktop-IMAP-Client tun). Um die gelöschten Nachrichten zu zwingen, ausgelöscht werden, wenn Sie mit dem Folder fertig sind (s), in dem sie ihren Wohnsitz haben, rufen Sie

folder.close(true); 

wo die wahre Flagge den Server anweist, alle gelöschten Nachrichten zu tilgen.

Und voila! Der Client sollte diese Nachrichten nicht mehr sehen, wenn er sich mit einem IMAP-Client mit dem Server verbindet.

EDIT:

Vergessen Sie nicht, den Ordner in READ_WRITE Modus zu öffnen, sonst werden die Nachrichten nicht tatsächlich vom Server gelöscht werden.

folder.open(Folder.READ_WRITE); 

See: http://java.sun.com/developer/onlineTraining/JavaMail/contents.html#JavaMailDeleting

+1

es dann geben die Antwort verwendet Flagge. – Koekiebox

+0

Methodenname sollte [setFlag] nicht sein [setFlags] [message.setFlag (Flags.Flag.DELETED, wahr);] –

+0

@MohammedSayed Danke, Sie haben Recht. Ich dachte, dies könnte auf eine API-Änderung in einer aktuellen Version zurückzuführen sein, aber nein - es ist nur seit fast vier Jahren falsch! –