javamail Problem beim Empfangen von Nachrichten

gogcho

Mitglied
Hallo zusammen ! Ich erstelle gerade eine kleine Mail-Programm mit java. Ich habe kleines Problem beim Anzeigen von empfangenen Nachrichten. Hier ist der wichtige Codeabschnitt:

Java:
private void nachrichtenAbholen() {
        
        einloggen=MiniMailStart.setEinloggen();
        String benutzername =einloggen.getBenutzername();
        String kennwort = einloggen.getKennwort();

        String server = "pop.gmail.com";
        
        Properties eigenschaften = new Properties();
        eigenschaften.put("mail.store.protocol", "pop3");
        eigenschaften.put("mail.pop3.host", server);
        eigenschaften.put("mail.pop3.port", "995");   
        eigenschaften.put("mail.pop3.starttls.enable", "true");
        Session sitzung = Session.getDefaultInstance(eigenschaften);

        try (Store store = sitzung.getStore("pop3s")){
            store.connect(server, benutzername, kennwort);   
            Folder posteingang  = store.getFolder("INBOX");
            posteingang.open(Folder.READ_WRITE);

            Message nachrichten[] = posteingang.getMessages();

            if (nachrichten.length != 0) {
                JOptionPane.showMessageDialog(this, "Es gibt "+ posteingang.getUnreadMessageCount() + " neue Nachrichten.");
                for(Message nachricht : nachrichten)
                    nachrichtVerarbeiten(nachricht);
            }               
            else
                JOptionPane.showMessageDialog(this, "Es gibt keine neue Nachrichten.");

            posteingang.close(true);
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }

    private void nachrichtVerarbeiten(Message nachricht) {
        try {
            if (nachricht.isMimeType("text/plain")) {
                String sender = nachricht.getFrom()[0].toString();
                String betreff = nachricht.getSubject();
                String inhalt = nachricht.getContent().toString();
                nachrichtSpeichern(sender, betreff, inhalt);
                nachricht.setFlag(Flags.Flag.DELETED, true);
            }
            else
                JOptionPane.showMessageDialog(this, "Der Typ der Nachricht " + nachricht.getContentType() + "kann nicht verarbeitet werden.");   
        }
        catch (Exception e) {
            JOptionPane.showMessageDialog(this, "Problem: \n" + e.toString());
        }
    }

Es ist nur auf gmail begrenzt. Wenn ich von meinem Laptop eine Nachricht zum Testen verschicke, wird sie nicht als text/plain anerkannt, also als reiner Text, sondern geht es in else-Zweig rein und wird mir angezeigt, dass der Typ multipart/alternative ist. Wenn ich vom Handy eine Mail verschicke ist alles in Ordnung. Habt ihr vielleicht eine Idee wo ich einen Fehler mache?
 

kneitzel

Top Contributor
Du machst im Code keinen Fehler - Emails können halt in diversen Formaten kommen und nicht nur als text/plain. Schick Emails als reine Text-Nachrichten (das wird auch von Deinem Laptop aus gehen) und schon wird die Email auch verarbeitet. Oder erweitere Die Logik, so dass Du auch andere Formate richtig verarbeiten kannst.

Evtl. einmal https://stackoverflow.com/questions...ipart-alternative-mail-with-javamail/16931800 als ersten Ansatz lesen. Da ist auch RFC 5322 verlinkt das mehr Details erhalten sollte.
 

EinNickname9

Bekanntes Mitglied
Du kannst beim (vor dem) Versenden das Email-Format in deinem Mail-Client-Programm angeben, auf dem Handy geht das aber meines Wissen nach nich...

Edit: "multipart/alternative" ist so etwas ähnliches wie plain.
 

kneitzel

Top Contributor
Also wenn man Emails verarbeiten will, dann sollte man sich das schon entsprechend im Detail ansehen und zumindest die üblichen Formate unterstützen.

Edit: "multipart/alternative" ist so etwas ähnliches wie plain.
Das würde ich so nicht sagen, die Nachricht besteht nur aus mehreren Teilen wobei die Teile als jeweilige Alternative anzusehen sein sollten.

multipart -> die Email ist aus mehreren Teilen aufgebaut.
alternative -> es gibt die nachricht in mehreren alternativen Formaten.

So findet man oft Emails im HTML Format und es gibt noch zusätzlich eine plain Variante für den Fall, dass ein Client kein HTML rendern will/kann. Aber da muss man aufpassen - ich habe auch schon erlebt, dass in der plain Variante nur ein Dummy Text gestanden hat a.la. bitte die HTML Email lesen :)

Weitere Erklärung / Quelle: Da wäre dann z.B. auf https://help.emarsys.com/hc/de/articles/360016272317-Best-practices-E-Mail-Größe-und-Multipart-Nachrichten- zu finden:
Der Contenttyp 'multipart/alternative' wird verwendet, wenn dieselbe Information in verschiedenen Teilen des Bodys auf unterschiedliche Weise präsentiert wird.

Zur Abarbeitung:
Eine Abarbeitung von multipart Nachrichten ist dann "einfach" über die Multipart Klasse. getContent gibt dann ein Multipart zurück und da kann man dann abfragen, wie viele Teile es gibt und jeden Teil einzelnd betrachten. Dabei wird man dann bestimmt Teile finden, die man zeigen kann.
(Man bekommt ein BodyPart und kann da dann auch getContent und getContentType aufrufen. Das kann man dann auch rekursiv betrachten: Eine Message ist auch ein Part - so wie auch eben ein Multipart oder BodyPart. Das war mal bei mir eine Herangehensweise).

Edit: Evtl. noch als Hinweis zu dem rekursiven Ansatz: Multipart kann verschachtelt sein! Also eine Nachricht kann z.B. sein:
Die Nachricht selbst ist multipart/mixed und hat mehrere Blöcke
Ein Block ist dann z.B. ein multipart/related und dazu noch Anhänge
multipart/related ist dann z.B. ein multipart/alternative und dazu noch inlines (z.B. vom html genutzt)
multipart/alternative hat dann die Nachricht - einmal als text/plain und einmal als text/html
==> Daher eine rekursive Herangehensweise!
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dann07 Problem mit JavaMail API Allgemeine Java-Themen 26
S JavaMail: Problem mit SecurityException Allgemeine Java-Themen 2
X Fragen zur Javamail API und Gmail Allgemeine Java-Themen 4
V JavaMail (die 2.) Allgemeine Java-Themen 5
V Java8 und JavaMail Allgemeine Java-Themen 27
pfz4 Javamail Allgemeine Java-Themen 12
NicoDeluxe JavaMail ohne Anhang senden Allgemeine Java-Themen 4
S JavaMail - MailSubject,MailFrom,MailDate in String Array speichern NullPointerException Allgemeine Java-Themen 2
L ClassCastException (JavaMail API) Allgemeine Java-Themen 3
M JavaMail Spam-Ordner Allgemeine Java-Themen 2
J javamail --- UnsupportedDataTypeException Allgemeine Java-Themen 6
N [GWT] JavaMail kommt nicht an Allgemeine Java-Themen 9
T JavaMail: "No provider for imaps" Allgemeine Java-Themen 2
B JavaMail Allgemeine Java-Themen 10
GUI-Programmer JavaMail - Anhang hochladen vor senden der Nachricht Allgemeine Java-Themen 4
F JavaMail - Lokale eMail-Datei einlesen und parsen? Allgemeine Java-Themen 9
K Javamail:Probleme mit der Darstellung von Umlaute in Subject Allgemeine Java-Themen 15
Mike90 JavaMail: Betreff bei POP3 nicht abrufbar Allgemeine Java-Themen 2
hdi JavaMail Lib einbinden? Allgemeine Java-Themen 5
B JavaMail + Bouncy Castle: isEncrypted Allgemeine Java-Themen 3
N Again - JavaMail Allgemeine Java-Themen 4
F Eclipse JAVAMAIL läuft nur unter Eclipste Applet Viewer Allgemeine Java-Themen 4
M Javamail -> andere Möglichkeit für Attachment Allgemeine Java-Themen 5
J JavaMail nur mit JEE? Allgemeine Java-Themen 4
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R Javamail Allgemeine Java-Themen 5
V Source zu Javamail? Allgemeine Java-Themen 2
F Umlaute: E-Mail per JavaMail und Textfile Allgemeine Java-Themen 5
G Javamail Nachricht senden: Betreff und Header fehlen Allgemeine Java-Themen 4
G Frage zu JAVAMail Allgemeine Java-Themen 10
T JavaMail versendet Schrott Allgemeine Java-Themen 9
C Probleme mit JavaMail und JAR-File Allgemeine Java-Themen 10
S JavaMail --> HTML-Mail verschicken? Allgemeine Java-Themen 7
J Externe File Emails für JavaMail Allgemeine Java-Themen 4
D JavaMail SMTP Fehlermeldung Allgemeine Java-Themen 2
D JavaMail Fehlermeldung Allgemeine Java-Themen 4
Luma JavaMail, Was versteht sich unter der CDDL Lizenz Allgemeine Java-Themen 6
G JavaMail API Allgemeine Java-Themen 4
S Mit javamail kompiliertes Programm läuft nicht ohne jar's Allgemeine Java-Themen 6
G JavaMail - Message vom Server, wie abfragen? Allgemeine Java-Themen 2
R JavaMail + Lotus Notes Allgemeine Java-Themen 8
P Probleme mit javaMail Allgemeine Java-Themen 2
M JavaMail? Allgemeine Java-Themen 3
D JavaMail - Authenticator Allgemeine Java-Themen 6
Splayfer Problem: no main manifest attribute Allgemeine Java-Themen 3
Splayfer JDA Problem mit MessageCounter Allgemeine Java-Themen 0
Splayfer Problem mit BufferedWriter Allgemeine Java-Themen 3
F Streams als Alternative für dieses Problem ? Allgemeine Java-Themen 15
C Maven Problem mit Datenbanktreiber (H2 Embedded) Allgemeine Java-Themen 12
T Problem beim Umwandeln in eine Jar-Datei Allgemeine Java-Themen 3
B Einfach Elemente zweier Arraylisten kreuz und quer vergleichen, min und max Problem? Allgemeine Java-Themen 16
C ArrayList Problem Allgemeine Java-Themen 3
kev34 nim-Spiel problem Allgemeine Java-Themen 1
D Firebase retrieve data Problem, Child Element wird nicht angesprochen Allgemeine Java-Themen 0
G Welches Problem besteht bei den Typparametern? Allgemeine Java-Themen 5
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
Sumo_ow "ArrayIndexOutofBoundsException: 2" Array Problem Allgemeine Java-Themen 6
T PIM basierend auf netbeans via AnyDesk Problem Allgemeine Java-Themen 3
xGh0st2014 Problem mit Java Array Allgemeine Java-Themen 1
Kirby.exe Verständnis Problem bei Rucksack Problem Allgemeine Java-Themen 6
B Eclipse-Lombok-Problem Allgemeine Java-Themen 19
I Input/Output ObjectOutputStream - Problem Allgemeine Java-Themen 7
1 Multiple Choice Knapsack- Problem Allgemeine Java-Themen 2
kodela Problem mit strukturiertem Array Allgemeine Java-Themen 18
E Problem mit Gridlayout und Button Allgemeine Java-Themen 2
A Array Problem Allgemeine Java-Themen 8
bueseb84 Problem Allgemeine Java-Themen 0
S Problem mit Arrays Allgemeine Java-Themen 1
D Nullpointer Exception Problem Allgemeine Java-Themen 5
B Problem mit meinen Klassen Allgemeine Java-Themen 6
A HashMap Methode "get()"-Problem Allgemeine Java-Themen 28
J Problem beim Umstellen auf Java jdk 13 Allgemeine Java-Themen 3
J Problem bei Install java 13 Allgemeine Java-Themen 3
X Profitable Reise Problem Allgemeine Java-Themen 32
A Problem beim öffnen von Java-Installern Allgemeine Java-Themen 1
J Problem beim Generischen Klassen und Interfaces Allgemeine Java-Themen 2
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
J Clear-Problem Allgemeine Java-Themen 10
B Problem zu einem Java Projekt Allgemeine Java-Themen 6
S JFileChooser Problem Allgemeine Java-Themen 4
M Traveling Salesman - MST Heuristik Problem Allgemeine Java-Themen 4
J Traveling Salesman Problem Allgemeine Java-Themen 14
E Java Editor Problem mit 2er Exceptions Allgemeine Java-Themen 12
C code oder Bibliotheken für 2-Center Problem Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
S Methoden Problem mit NullPointerException Allgemeine Java-Themen 9
Javafan02 Problem mit if-clause Allgemeine Java-Themen 17
J Lombok Problem mit Konstruktoren bei Verberbung Allgemeine Java-Themen 1
kodela Event Handling Problem mit der Alt-Taste Allgemeine Java-Themen 16
W Threads Problem Allgemeine Java-Themen 15
D (Verständnis-)Problem mit Unterklasse Allgemeine Java-Themen 4
S Problem mit Generic bei unmodifiableCollection Allgemeine Java-Themen 4
S jserialcomm Problem Allgemeine Java-Themen 1
Flynn Thread-Problem... Allgemeine Java-Themen 2
J Generische Interface - Problem Allgemeine Java-Themen 3
G Problem beim GUI Allgemeine Java-Themen 9
L Applet Problem "security: Trusted libraries list file not found" ? Allgemeine Java-Themen 7
A OOP Problem beim Berechnen der größten Fläche eines Ringes Allgemeine Java-Themen 19
T Problem mit externen Datenbankzugriff über SSH Tunnel Allgemeine Java-Themen 4
F Problem beim Einlesen einer Textdatei Allgemeine Java-Themen 12

Ähnliche Java Themen


Oben