Her mit den E-Mails: Mailempfang in Javamail

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.

Page: 1 2 3 4 5

ZDNet.de Redaktion

Recent Posts

Forscher entwickeln Exploits per GPT-4 aus Sicherheitswarnungen

Die Tests basieren auf tatsächlich existierenden Sicherheitslücken. GPT-4 erreicht eine Erfolgsquote von 87 Prozent. Alle…

1 Woche ago

HostPress für Agenturen und E-Commerce-Betreiber

Höchste Performance-Standards für Webseiten und ein persönlicher, kundenorientierter Premium Support.

1 Woche ago

V-NAND: Samsung steigert Bit-Dichte um 50 Prozent

Die neue V-NAND-Generation bietet die derzeit höchste verfügbare Bit-Dichte. Samsung steigert auch die Geschwindigkeit und…

1 Woche ago

Bericht: Google entwickelt App-Quarantäne für Android

Die Sicherheitsfunktion taucht in einer Beta eines kommenden Android-Updates auf. Die Quarantäne beendet unter anderem…

1 Woche ago

Kostenloser Kurs zum Ausbau von Low-Code-Programmierung

Die OutSystems Developer School hilft Entwicklern, in 2 Wochen komplexe reaktive Anwendungen mit der Low-Code-Plattform…

1 Woche ago

Cloudflare: DNS-basierte DDoS-Angriffe steigen im ersten Quartal um 80 Prozent

Das Jahr 2024 beginnt laut Cloudflare mit einem Paukenschlag. Die automatischen Systeme des Unternehmens wehren…

1 Woche ago