Der Betreff ist leicht zu erkennen, da er direkt dargestellt wird. Über den Inhalt lassen sich auch einige Vermutungen anstellen. Man erinnere sich an die Part-Schnittstelle aus dem vorangehenden Artikel, als aus BodyPart und MimeBodyPart eine Nachricht zusammengesetzt wurde. Beim Dekodieren der E-Mail hat man es mit einem Baum aus Parts zu tun, wobei die Nachricht dessen Krone bildet. Im Falle reiner Textnachrichten geht es aber nur um den reinen Textinhalt als String.
Multipart-Nachrichten sind da schon komplexer. Wie der Ausdruck Multipart schon andeutet, setzt sich der Part in diesem Fall aus mehreren Teilen zusammen, die es bei der Erfassung des Inhalts zu berücksichtigen gilt. In diesem Beispiel wird eine RenderableMessage-Klasse verwendet, die eine Nachricht mit HTML-Text und Anhängen zerlegt.
RenderableMessage ist ein ganz einfacher Handler, der diejenigen Parts durchläuft, für welche die extractPart-Methode gilt. Als Erstes wird dabei festgestellt, ob es sich bei dem jeweiligen Part um ein Teil eines Multiparts handelt. Wenn ja, werden alle diese untergeordneten Teile durchlaufen und extractPart für sie aufgerufen:
Nun kann jeder andere Text-/HTML-Inhalt auf ähnliche Weise wie oben der reine Text verarbeitet werden.
Im Grunde ist alles ganz einfach: Wenn mehrere Text-/HTML-Teile vorhanden sind, wird der in ihnen enthaltene Rohtext in einem langen String zusammengefügt. Nun geht es an den Kern des Verfahrens:
Wenn es sich bei dem Inhalt nicht um reinen Text handelt, wird er als Anhang behandelt und es wird eine eigene Attachment-Instanz erstellt (die lediglich einen Platzhalter für den Dateinamen, Inhaltstyp und eine Byte-Reihe mit dem Inhalt darstellt) und der Inhaltstyp sowie der Dateiname eingetragen. Der eigentliche Inhalt ist als InputStream verfügbar, den man lesen muss. Man erstellt einen ByteArrayOutputStream, in den der Inhalt geschrieben wird:
Dann fügt man den InputStream des Inhalts hier ein:
Schließlich setzt man den Inhalt der Attachment-Instanz aus dem ByteArrayOutputStream ein und fügt das Attachment zu einer ArrayList aus Anhängen hinzu:
Somit hat man das Extrahieren des Inhalts der Anhänge abgeschlossen. Es gibt in Mailretriever eine Hauptmethode, mit der man Mailretriever ausführen kann: Einfach Benutzername, Passwort, Servername und Providertyp als Parameter für die Ausführung eingeben und die letzte Nachricht wird gefunden, wobei der Text und eine Liste der Anhänge auf der Konsole angezeigt werden. Hier das Ergebnis eines Durchlaufs:
In diesem Fall sind zwei Bilder angefügt. Nebenbei bemerkt: Im HTML-Text der Nachricht stehen <IMG>-Verweise nicht auf die Dateinamen der Bilder, sondern auf cid: URLs. Der Umgang mit diesen wird im einem weiteren Artikel erklärt werden, wenn es um die Eingliederung des Mailretriever-Codes in ein Servlet gehen wird.
Neueste Kommentare
Noch keine Kommentare zu Her mit den E-Mails: Mailempfang in Javamail
Kommentar hinzufügenVielen Dank für Ihren Kommentar.
Ihr Kommentar wurde gespeichert und wartet auf Moderation.