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

iPhone 15 ist bestverkauftes Smartphone im dritten Quartal

Apple belegt in der Statistik von Counterpoint die ersten drei Plätze. Samsungs Galaxy S24 schafft…

6 Tagen ago

So günstig & effizient war Content Produktion noch nie: Neues Content System erobert deutschen Markt

Kontinuierliche Content Produktion und Markenaufbau sind essentieller Pfeiler von langfristigen Unternehmenserfolg. Das ist mittlerweile auch…

6 Tagen ago

Lenovo übertrifft die Erwartungen und hebt Prognose an

KI-Funktionen beschleunigen die Erholung des PC-Markts. Der Nettogewinn legt um 44 Prozent zu, der Umsatz…

7 Tagen ago

Bedrohungsakteure betten Malware in macOS-Flutter-Anwendungen ein

Googles App-Entwickler-Kit dient der Tarnung des schädlichen Codes. Der Sicherheitsanbieter Jamf hält die Schadsoftware für…

7 Tagen ago

CopyRhadamantys greift weltweit Unternehmen an

Ausgeklügelte Phishing-Kampagne verwendet eine weiterentwickelte Version der Rhadamanthys-Stealer-Malware.

1 Woche ago

Facebook Marketplace: EU verhängt Geldbuße von fast 800 Millionen Euro gegen Meta

Die EU-Kommission kritisiert die Verknüpfung von Facebook und dem hauseigenen Online-Kleinanzeigendienst. Sie sieht darin einen…

1 Woche ago