EML Email Text in String wandeln

Christoph74

Bekanntes Mitglied
Hallo,

ich probier schon seit Tagen wie ich den Text einer EML-Datei/Email in einen String wandeln kann -> hat da jemand ne Idee/sowas schon mal gemacht?
(Subject, to, cc usw. sowie Anhänge bringe ich raus, nur den Text der Email nicht -> da krieg ich ne unlesbare Menge an Millionen von Zeichen).


Christoph
 

KonradN

Super-Moderator
Mitarbeiter
EML Dateien sollten direkt in dem Format sein, das auch bei SMTP über die Leitung geht. Das ist das Internet Message Format welches u.a. in RFC 5322 beschrieben wurde (https://datatracker.ietf.org/doc/html/rfc5322).

Da ist der Inhalt aber nicht im Detail festgelegt. Der Body ist damit einfach festgelegt als ASCII Zeichen ("The body of a message is simply lines of US-ASCII characters.") mit noch ein paar Einschränkungen (z.B. bezüglich CR / LF Zeichen).

Aber natürlich kann man in einer Email deutlich mehr transportieren. Dazu gibt es dann diverse weitere Standards. Mit am weitesten verbreitet ist hier der MIME Standard und da sind mehrere RFCs verlinkt:
2.3. Body

The body of a message is simply lines of US-ASCII characters. The
only two limitations on the body are as follows:

o CR and LF MUST only occur together as CRLF; they MUST NOT appear
independently in the body.
o Lines of characters in the body MUST be limited to 998 characters,
and SHOULD be limited to 78 characters, excluding the CRLF.

Note: As was stated earlier, there are other documents,
specifically the MIME documents ([RFC2045], [RFC2046], [RFC2049],
[RFC4288], [RFC4289]), that extend (and limit) this specification
to allow for different sorts of message bodies. Again, these
mechanisms are beyond the scope of this document.

Und damit kannst Du hier dann auch die Klassen von z.B. der JavaMail API nutzen. javax.mail.internet.MimeMessage hat einen Konstruktor, der eine Session und einen InputStream als Parameter nimmt und damit solltest Du dann die EML Datei einlesen können.
 

KonradN

Super-Moderator
Mitarbeiter
Evtl. noch als zusätzliche Information: Du bekommst in der Regel einen Content-Type in dem Header mit. Da sollte also drin stehen, wie der Inhalt codiert wurde.

Bei eine MIME Nachricht wird da vermutlich multipart/mixed, multipart/alternative oder so in der Art zu finden sein.
 

Christoph74

Bekanntes Mitglied
Hallo Konrad,

erstmal vielen Dank für Deine Antwort!

Ich glaub aber fast soweit bin ich schon -> nachfolgend mein Code und da kommt eben die von mir erwähnte Zeichenkette mit einer Länge von mehr als 2 Mio Zeichen raus:

Java:
            // -- Get the message part (i.e. the message itself) --           
            Part messagePart = message;
            Object content = messagePart.getContent();
            String contentType = "";
            
            // -- or its first body part if it is a multipart message --
            if (content instanceof Multipart)
            {
                Multipart multipart = (Multipart) content; 
       
                for (int i = 0; i < multipart.getCount(); i++)
                {
                    messagePart = multipart.getBodyPart(i);
                    contentType = messagePart.getContentType();
                    if (contentType.startsWith("text/plain") || contentType.startsWith("text/html") || contentType.startsWith("text/rfc822"))
                    {
                        break;
                    }    
                } 
                
                
            }  
            else
            {
                contentType = messagePart.getContentType();
            }     
                                      

            // -- If the content is plain text, we can print it --
            if (contentType.startsWith("text/plain") || contentType.startsWith("text/html") || contentType.startsWith("text/rfc822") )
            {
                InputStream is = messagePart.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                String thisLine;                
                while ((thisLine = reader.readLine()) != null)
                {
        
                        text = text + " "+ thisLine;

                }
            }
 

KonradN

Super-Moderator
Mitarbeiter
Kannst Du denn einmal schauen, was denn in der eml Datei enthalten ist? Du kannst Die Datei ja in einem Editor öffnen.
a) Direkt in dem Header der Email: Was für ein ContentType hast Du da?
b) Wenn es eine multipart Email ist: Was ist der letzte Part?
Und die Multipart Emails sind relativ lesbar, was den Rahmen angeht. Jeder Part hat ein eigenes Boundary incl. Content Type.

Oder evtl. einfach einmal etwas mehr Ausgabe hinzufügen:
Java:
            if (content instanceof Multipart)
            {
                log.info("Multipart Email with parts:")
                Multipart multipart = (Multipart) content;
     
                for (int i = 0; i < multipart.getCount(); i++)
                {
                    messagePart = multipart.getBodyPart(i);
                    contentType = messagePart.getContentType();
                    log.info("Part Type: " + contentType);
                    if (contentType.startsWith("text/plain") || contentType.startsWith("text/html") || contentType.startsWith("text/rfc822"))
                    {
                        break;
                    }  
                }
               
               
            }
            else
            {
                contentType = messagePart.getContentType();
                log.info("Email with content type: " + contenttype);
            }

Nicht dass Du ein Problem hast, dass Du eine Multipart Email bekommen hast und dann die Content Types durchgehst. Um dann am Ende ein Content Type "text/..." zu haben. Denn nach dem durchgehen der Parts nimmst Du dann die ganze Email als Text.

Sprich: Hier wäre evtl. einmal interessant, wie die EML Datei genau aussieht. Wenn Du da keine Test-Email im Forum weitergeben willst, könntest Du mir auch gerne etwas per Email zukommen lassen an konrad at neitzel dot de.

Edit: Wichtiger Hinweis: Der Gedanke von wegen "Denn nach dem durchgehen der Parts nimmst Du dann die ganze Email als Text." ist natürlich Quatsch. Es wird ja die Variable messagePart richtig gesetzt! Und das kommt dann auch im Rahmen der weiteren Tests / Untersuchungen raus.
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Als kleine Ergänzung nach ein paar lokalen Tests: Der Code funktioniert bei mir. Das Problem ist evtl. einfach, dass text bereits einen Inhalt hat und Du da nur den Text Inhalt der Mail anhängst. (An den Part kommst Du auch einfacher per getContent() - das gibt zwar ein Object aber das ist dann ein String.
 

KonradN

Super-Moderator
Mitarbeiter
Da sind Informationen zum Debugging von javax.mail - aber darum geht es nicht. Er nutzt es ja korrekt. Was für Debug Ausgaben in einem Log würden ihm helfen? Zumal sein Code bei mir problemlos funktionierte und meine Vermutung ist, dass lediglich ein text="" als Initialisierung fehlt.

Details hat der TE aber auch per Email bekommen incl. dem test-Code, den ich verwendet habe und der Ausgabe des Tests.
 

Christoph74

Bekanntes Mitglied
Konrad rules!

Hier nochmal der Code zum Auslesen des Email-Textes einer EML-Datei in eine String-Variable:

Java:
            String contentType = null;
            BodyPart part = null;
             // -- Get the message part (i.e. the message itself) --           
            Object content = message.getContent();
            if (content instanceof Multipart multipartContent)
            {
                for (int i = 0; i < multipartContent.getCount(); i++)
                {
                    part = multipartContent.getBodyPart(i);
                    contentType = part.getContentType();
                    if (contentType.startsWith("text/plain"))
                    {
                        
                        InputStream is = part.getInputStream();
                        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                        String thisLine;
                        while ((thisLine = reader.readLine()) != null)
                        {

                            text = text + " " + thisLine;

                        }

                    }
                }
            }
            else
            {
              
                text = content.toString();
                
            }
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Input/Output Email mit großer Pdf Anhang auslesen? Allgemeine Java-Themen 7
javaBoon86 Email Server Connection Problem Allgemeine Java-Themen 1
TimEtech Email senden - web.de ; Fehlercode Allgemeine Java-Themen 2
OnDemand Java Email Templates Allgemeine Java-Themen 2
T @Email Allgemeine Java-Themen 42
B Java Mail: Prüfen, ob Email hat ein Anhang oder nicht Allgemeine Java-Themen 2
B Java Mail: Unterscheidung bei Attachments und eingefügte Bilder in Email Allgemeine Java-Themen 18
V EMail, Attachments auslesen von einer Email Allgemeine Java-Themen 0
B Bei Email: FW / AW... - Hilfe bei String suche Allgemeine Java-Themen 21
S Validation Null aber nicht Blank und muss Email sein Allgemeine Java-Themen 22
C Email Versand überprüfen Allgemeine Java-Themen 1
C Email mit public-key verschlüsseln Allgemeine Java-Themen 0
D Best Practice Gesamten Bildschirminhalt auslesen und Email schicken sobald kein Pixel sich ändert Allgemeine Java-Themen 11
M Email-Versand Java+Outlook Allgemeine Java-Themen 8
T Email versenden Allgemeine Java-Themen 1
P "Email" versenden mit Anhang Allgemeine Java-Themen 5
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
A Email-Programm aus Applet öffnen Allgemeine Java-Themen 4
A Email versenden mehrere Zeilen Allgemeine Java-Themen 10
H RegEX und eMail Allgemeine Java-Themen 4
foobar Email mit Standard Mailclient versenden Allgemeine Java-Themen 12
Developer_X Email per Java senden Allgemeine Java-Themen 81
D Email versand bei einem festgelegten Datum Allgemeine Java-Themen 11
C automatische email nach 6 tagen! Allgemeine Java-Themen 14
D Email an mehrer Absender versenden Allgemeine Java-Themen 3
M Email - Informationen auslesen Allgemeine Java-Themen 3
N EMail-Versandt mit Java 6: komplexer Body Allgemeine Java-Themen 4
M kennt jemand nen gute email client in java mit imap? Allgemeine Java-Themen 3
L javaformular auf website (eingabe per email zusenden) Allgemeine Java-Themen 3
L Java & Excel & EMail Allgemeine Java-Themen 2
L Ping Probe auf hinteren Teil einer Email Adresse (nach @) Allgemeine Java-Themen 5
G EMail Client Allgemeine Java-Themen 7
K Email mit Anhang über mailto:. versenden Allgemeine Java-Themen 11
S eMail Dienst mit Java Allgemeine Java-Themen 3
A Regulärer Ausdruck EMail-Prüfung Allgemeine Java-Themen 3
S java mail API, email versenden Allgemeine Java-Themen 8
S standard-email-programm öffnen Allgemeine Java-Themen 4
O Text aus einer Textdatei rausholen, der zwischen zwei Schlüsselworten steht Allgemeine Java-Themen 4
K Bildschirm auslesen/ Text erkennen Allgemeine Java-Themen 5
berserkerdq2 Text über einen Shape anzeigen (Scenebuilder) Allgemeine Java-Themen 1
M Thymeleaf th value und th text Allgemeine Java-Themen 1
_user_q Eingegebenen Text Zeile für Zeile ausgeben lassen Allgemeine Java-Themen 11
_user_q Eingegebenen Text wiederholt schreiben lassen Allgemeine Java-Themen 9
G Darstellung von Text auf MapContext von GeoTools Allgemeine Java-Themen 2
Alex_99 Programm stürzt beim Aufruf der Funktion ab? Text ausgeben Allgemeine Java-Themen 45
Mozart53 JLabel nur meinen Text verschieben ohne Image Allgemeine Java-Themen 3
izoards Bestimmter Text aus PDF extrahieren Allgemeine Java-Themen 3
B Scanner erkennt keinen Text in Textdatei, obwohl welcher drinsteht Allgemeine Java-Themen 10
K HTMLEditor HTML Text in Rich Text umwandeln Allgemeine Java-Themen 14
kodela JDialog zeigt Text nicht an Allgemeine Java-Themen 5
L Text filtern Allgemeine Java-Themen 1
Bluedaishi TEXT Kodierung Allgemeine Java-Themen 3
J Die Letzte Zahl aus einer Text datei lesen Allgemeine Java-Themen 8
S Ini Text aus String parsen Allgemeine Java-Themen 1
M itext - Button der Text in Zwischenablage stellt Allgemeine Java-Themen 0
E CSV mit Text und Binärdaten auslesen Allgemeine Java-Themen 7
FRI3ND Datentypen Date-Array sortieren - Text mitnehmen? Allgemeine Java-Themen 7
I Text suchen und ersetzen im Word Dokument Allgemeine Java-Themen 3
windl Text mining / deep learning Allgemeine Java-Themen 0
I Text aus Input-Box entnehmen und zuweisen Allgemeine Java-Themen 1
KeexZDeveoper Text Mining Allgemeine Java-Themen 3
L Input/Output Wie kann man in der Konsole einen Text farbig ausgeben z.b in grün Allgemeine Java-Themen 6
B Arrays mit Text und Zahlen füllen Allgemeine Java-Themen 3
A Datenexport (Text und Draw) Allgemeine Java-Themen 1
L Text von txt auf JTextArea Allgemeine Java-Themen 4
N Das Ende von bestimmten zeilen in text datei ändern und speichern Allgemeine Java-Themen 3
A 2D-Grafik Text in ein Bild schreiben Allgemeine Java-Themen 11
T Textarea text wird immer überschrieben Allgemeine Java-Themen 4
I Apache POI Word Text einfügen Allgemeine Java-Themen 26
T itext: text in ein textfeld hinzufügen Allgemeine Java-Themen 2
B Farbiger Text in der Konsole Allgemeine Java-Themen 1
K Pdf mit dynamischem Text mit iText Allgemeine Java-Themen 0
D Text Analyzer Allgemeine Java-Themen 2
RalleYTN Audiodatein(.ogg/.wav) in Text konvertieren Allgemeine Java-Themen 0
L Nach Button drücken den Text festspeichern Allgemeine Java-Themen 9
X Löschen von einer Zeile in einer Text Datei. Klappt nicht. Allgemeine Java-Themen 4
J Text lesen und in Variablen speichern Allgemeine Java-Themen 3
S Text in mehreren Sprachen korrekt darstellen? Wie waehle ich die Fonts aus..? Allgemeine Java-Themen 0
J Java - Zeile aus Text datei löschen Allgemeine Java-Themen 13
M Text in erstelltes Excelfile schreiben Allgemeine Java-Themen 6
N Input/Output Website Text auslesen und bestimmte Zeilen wiedergeben Allgemeine Java-Themen 4
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
P HTML Text bearbeiten Allgemeine Java-Themen 1
B JFrame Text Ausgabe Allgemeine Java-Themen 7
G Makierter Text in Arbeitsspeicher Allgemeine Java-Themen 2
B Text in die Mitte der Konsole schreiben. Allgemeine Java-Themen 1
M Variablen Variablen in Text einbinden Allgemeine Java-Themen 5
P iText Text zentrieren Allgemeine Java-Themen 3
J Verschlüsselung von Text? Allgemeine Java-Themen 2
M Text datei in java jar datei einbinden Allgemeine Java-Themen 4
S Swing Text in eine JTextArea schreiben Allgemeine Java-Themen 17
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
S Robuste Methode um Text von HTML code zu extrahieren..? Allgemeine Java-Themen 6
achillesat Rich Text Editor Allgemeine Java-Themen 2
M CMD-Text anzeigen Allgemeine Java-Themen 10
G Text Mining Allgemeine Java-Themen 7
B Text auf Standarddrucker drucken Allgemeine Java-Themen 3
S Library fuer Internet-Text-Daten-Quellen..? Allgemeine Java-Themen 8
nrg Find and replace Text docx Allgemeine Java-Themen 6
M Ein bestimmtes Wort in einem Text zählen (String in String) Allgemeine Java-Themen 9

Ähnliche Java Themen

Neue Themen


Oben