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



## bluerob (6. Feb 2011)

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.


```
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 (6. Feb 2011)

Ersetz das nutzlose sysout("fehler") durch ein sinnvolles 
	
	
	
	





```
e.printStackTrace()
```
 dann weißt du schon mal mehr.


----------



## bluerob (6. Feb 2011)

XHelp hat gesagt.:


> Ersetz das nutzlose sysout("fehler") durch ein sinnvolles
> 
> 
> 
> ...



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()
> 
> ...



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


----------



## XHelp (6. Feb 2011)

Wo kommt denn die Mail her? Vllt ist die Nachricht einfach nur fehlerhaft.


----------



## bluerob (6. Feb 2011)

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?


----------



## bluerob (6. Feb 2011)

*Bitte diesen Post löschen*


----------



## bluerob (6. Feb 2011)

So, hab das letzte Problem auch gelöst:


```
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*


----------



## HoaX (7. Feb 2011)

Ich würde dir schwer empfehlen mal die API anzukucken!

java.mail.Address#getAddress() :
InternetAddress (JavaMail API documentation)


----------

