JavaMail Base64DecoderStream

Maddin

Mitglied
Hallo zusammen,

ich schildere einfach direkt mal alles, was mit dem Problem zusammenhängt..

Ziel: Auf einem Mail-Server über Mails iterieren und bestimmte Anhänge runterladen.
Was funktioniert: Den Content einer Message behandeln, insofern er ein Multipart ist.

Problem: In einigen Fällen ist der Content einer Message (Message#getContent()) kein Multipart, sondern ein Base64DecoderStream. Dabei kann ich mir über Base64DecoderStream#read() zwar den ganzen String-Inhalt der Mail runterziehen, aber damit wirklich was anfangen und vor allem auf die Anhänge schließen klappt noch nicht.

Deswegen die Frage, ob und wie man mit dem Base64DecoderStream schön umgehen kann (am besten wäre es natürlich, wenn er sich wie der Multipart behandeln ließe).
Beim Googeln finde ich leider kaum Inhalt, außer ein paar Seiten, die das Readen erklären.

EDIT: Eigentlich geht's bei diesem Thema generell um InputStreams bei einer Message, weniger um den Base64DecoderStream.


Vielen Dank im Voraus!

Gruß,
Martin
 
Zuletzt bearbeitet:
Hi Thomas,

vielen Dank für die Antwort!
Besonders der zweite Link scheint auf mein Problem zuzutreffen.

Wenn ich die passende Lösung gefunden habe, poste ich sie hier noch rein.

Viele Grüße,
Martin

edit:
Die Links haben sich leider beide nicht auf das Problem mit dem InputStream bezogen.
Im zweiten Link wird zwar mit
Java:
if (content instanceof Multipart) {
    handleMultipart((Multipart)content);
} else {
    handlePart(message[i]);
}
theoretisch etwas anderes als der Multipart gehandelt, allerdings wird hier ein Objekt vom Typ Message einer Methode übergeben, die als Parameter einen Part erwartet...

--
An sich lässt sich die komplette Nachricht über Streams ja auslesen:
Java:
Object messagecontentObject = message.getContent();
if (messagecontentObject instanceof InputStream) {
    InputStream stream = (InputStream) messagecontentObject;
    OutputStream os = new FileOutputStream(new File("test.txt"));
    int c = 0; // nur zum Testen, die Effizienz sei mal dahingestellt
    while ((c = stream.read()) != -1) {
        os.write(c);
    }
}
Allerdings fehlt mir hier der Ansatz, wie ich herausfinde, was in der Nachricht ein Anhang ist, welchen Dateinamen dieser Anhang hat usw.
Wäre super, wenn jemand noch eine Idee hat!

Gruß,
Martin

edit:
"Problem" gelöst.
Vor allem hatte ich ein falsches Verständnis von Mails, da ich dachte, dass alles in Parts gewrapped sein muss.
Wenn der messageContent ein InputStream ist, deutet das darauf hin, dass die Nachricht nichts weiter als einen einzigen Anhang enthält.

Der InputStream kann also ganz normal ausgelesen werden.
EDIT: Dateiname lässt sich dann über message.getFileName() holen. Analog für Disposition etc.

Gruß,
Martin
 

Neue Beiträge

Zurück