MimeMessage .getFrom()[0]; liest eml-Datei nicht

bluerob

Mitglied
Hallo liebe Java-Community.

Seit einigen Tagen tüftel ich an einem Problem in meinem Programm.
In Google konnte ich leider keine Lösung finden, aus welchem Grund ich mich nun an euch wende.

Ich habe ein Programm geschrieben, welches eml-Datein aus einem Verzeichnis verwaltet.
Dabei wird die E-Mail via javax.mail eingelesen und wichtige Daten ausgegeben.

So brauche ich den Absender, das Datum und natürlich den Betreff.

Java:
public String From;
public String Subject;
public Date Sent;

...
    public void FromSubjectSent(String fileName)
    {
        try
        {
            Properties props = System.getProperties();
            props.put("mail.host", "smtp.dummydomain.com");

            Session mailSession = Session.getDefaultInstance(props, null);
            InputStream source = new FileInputStream(new File(fileName));
            MimeMessage message = new MimeMessage(mailSession, source);

            Subject = message.getSubject();
            Sent = message.getSentDate();
            
            From = message.getFrom()[0];

            MimeMultipart mmp = (MimeMultipart) message.getContent();           //Mail-Ausgabe
                for (int i=0; i<mmp.getCount(); i++)
                {
                    BodyPart mbp = mmp.getBodyPart(i);
                    mailPuffer = mbp.getContent().toString();
                }
            source.close();
        }
            catch (Exception e)
            {
                System.out.println("FSS-catch");
            }
    }

Benutze ich ich diese Methode, so bekomme ich wie gewollt Datum und Betreff, aber seltsamer Weise catcht er, sobald es an den Absender geht.
Meine Vermutung ist, dass irgendwas mit der Adresse nicht stimmt, aber Nachforschungen darüber haben mir leider auch nicht weitergeholfen.
Ich habe versucht sie aus dem Header auszulesen, doch daran bin ich leider auch gescheitert.

Eigentlich müsste diese Art und Weise aber eigentlich funktionieren, wie es etliche andere Programme im Netz beweisen.

Vielleicht fehlt mir das nötige Hintergrundwissen über javax.mail.

Fällt euch etwas zu meinem Problem ein?
Wäre echt super!

Liebe Grüße

bluerob
 

XHelp

Top Contributor
Ersetz das nutzlose sysout("fehler") durch ein sinnvolles
Code:
e.printStackTrace()
dann weißt du schon mal mehr.
 

bluerob

Mitglied
Ersetz das nutzlose sysout("fehler") durch ein sinnvolles
Code:
e.printStackTrace()
dann weißt du schon mal mehr.

Das ist natürlich nützlich ;)

Also:

java.lang.RuntimeException: Uncompilable source code - incompatible types
required: java.lang.String
found: javax.mail.Address[]

Bedeutet, dass ich den falschen Variablen Typ benutze.

message.getFrom(); benötigt ein Adresse[] Objekt:

getFrom

public abstract Address[] getFrom()

Returns:
array of Address objects

folglich:

Address[] From = message.getFrom();

führt zu:

javax.mail.internet.AddressException: Domain contains illegal character in string ``test@test.local''

Das versteh ich jetzt aber nicht, schließlich gibt ".getFrom()" ein Address Object zurück.
Der Fehler ist aber wieder String?

Hab in diesem GEbiet eifnach zu wenig Kenntnis :(
 

bluerob

Mitglied
Habe mir die Mail mit dem Programm sendEMail geschickt, aber ist eigentlich eine ganz normale .eml Datei, als solche wird sie gespeichert und javax.mail ist ja dafür da, genau diese Datein auszulesen.

Edit:

Bin jetzt soweit, dass ich wenigstens eine Ausgabe bekomme:

[Ljavax.mail.internet.InternetAddress;@ef2c60

Das selbe hatte ich beim Content, da konnte ich das Problem aber mit MimeMultipart und BodyPart lösen.
Für den Sender finde ich dafür aber leider nichts...

Edit 2:

Auf einmal funktioniert:

From = message.getFrom()[0].toString();.

Gibt nur noch ein Problem und zwar, dass die Ausgabe folgendermaßen aussieht:

"test@test.local" <test@test.local>

Das Ausschneiden daraus müsste doch eigentlich javax.mail übernehmen?
Wurde doch so programmiert, dass man wirklich nur 1x die Adresse ohne Sonderzeichen bekommt oder?
 
Zuletzt bearbeitet:

bluerob

Mitglied
So, hab das letzte Problem auch gelöst:

Java:
            public String From;   

... 

            Properties props = System.getProperties();
            props.put("mail.host", "smtp.dummydomain.com");

            Session mailSession = Session.getDefaultInstance(props, null);
            InputStream source = new FileInputStream(new File(fileName));
            MimeMessage message = new MimeMessage(mailSession, source);

...

            String from = message.getFrom()[0].toString().replaceAll("[<|>]","");//From
            String[] from2 = from.split(" ");

            for(int p=0;p<from2.length;p++)
            {
                if(from2[p].contains("@"))
                {
                    From = from2[p];
                }
            }

Edit:

Wäre nett, wenn ein Mod den Post drüber löscht, der war nicht extra
 

Ähnliche Java Themen


Oben