Servus,
für mein Praktikum muss ich ein Programm schreiben, das aus einer mbox-Datei e-Mails ausließt. So weit so gut, das ist kein Problem und funktioniert auch ganz gut. Probleme bereiten mir nur die Anhänge.
Gegebener Fall: an jede eMail wurde die Datei doc1.docx angehängt. Diese Datei ist offensichtlich mit base64 verschlüsselt, da die mbox-Datei im ASCII-Format vorliert, docx-Dateien jedoch im Binärformat (so wie ja fast alle anderen Dateianhänge auch).
Aus der mbox-Datei habe ich mal folgenden Ausschnitt:
Der Zugriff auf den Anhang erfolgt über einen BodyPart. Wenn es sich bei diesem um "text/plain" handelt, kann dieser mit bp.getContent() einfach ausgegeben werden. Ist dem nicht so, gibt es auch keinen String. Dafür gibt es aber bp.getInputStream().
Tja, ich habs mal mit BASE64DecoderStream bds = new BASE64DecoderStream(isAusBp); probiert, da meckert er aber rum, und ich kann mir schon gut denken, dass es daran liegt, dass der Anhang in mehrere Zeilen aufgeteilt wurde.
Nun ja, jetzt bin ich mit meinem Latein endgültig am Ende und brauche eure Hilfe. Wäre echt nett von euch, wenn ihr da was machen könntet.
GreeetZ
//EDIT: Diese Fehlermeldung bekomme ich:
Der entsprechende Code:
//EDIT2:
Hab schon versucht, den InputStream mit StringBuilder in einen String umzuwandeln. Ergebnis: ein langer Binärstring, 16 KB groß, die Originaldatei ist aber 24 KB groß. Hab jetzt aber mal beide Dateien verglichen und sie enthalten beide folgende Zeilen:
Also scheinbar funktioniert es irgendwie, nur dass eben 8 KB fehlen
für mein Praktikum muss ich ein Programm schreiben, das aus einer mbox-Datei e-Mails ausließt. So weit so gut, das ist kein Problem und funktioniert auch ganz gut. Probleme bereiten mir nur die Anhänge.
Gegebener Fall: an jede eMail wurde die Datei doc1.docx angehängt. Diese Datei ist offensichtlich mit base64 verschlüsselt, da die mbox-Datei im ASCII-Format vorliert, docx-Dateien jedoch im Binärformat (so wie ja fast alle anderen Dateianhänge auch).
Aus der mbox-Datei habe ich mal folgenden Ausschnitt:
------=_Part_26_11180085.1275031800092
Content-Type: application/octet-stream; name=doc1.docx
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=doc1.docx
UEsDBBQABgAIAAAAIQDd/JU3ZgEAACAFAAATAAgCW0NvbnRlbnRfVHlwZXNdLnhtbCCiBAIooAAC
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC0
VMtuwjAQvFfqP0S+Vomhh6qqCBz6OLZIpR9g7A1Y9Uv28vr7bgJEVQtBKuUSKVnvzOzsxIPR2pps
CTFp70rWL3osAye90m5Wso/JS37PsoTCKWG8g5JtILHR8PpqMNkESBl1u1SyOWJ44DzJOViRCh/A
UaXy0Qqk1zjjQchPMQN+2+vdcekdgsMcaww2HDxBJRYGs+c1fd4qiWASyx63B2uukokQjJYCSSlf
OvWDJd8xFNTZnElzHdINyWD8IENdOU6w63sja6JWkI1FxFdhSQZf+ai48nJhaYaiG+aATl9VWkLb
X6OF6CWkRJ5bU7QVK7Tb6z+qI+HGQPp/FVvcLnrSOY4+JE57OZsf6s0rUDlZESCihnZ1x0cHRLLs
EsPvkLvGb1KAlHfgzbN/tgcNzEnKin6JiZgaOJvvV/Ja6JMiVjB9v5j738C7hLT5kz7+wYz9dVF3
H0gdb+634RcAAAD//wMAUEsDBBQABgAIAAAAIQAekRq38wAAAE4CAAALAAgCX3JlbHMvLnJlbHMg
ogQCKKAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Der Zugriff auf den Anhang erfolgt über einen BodyPart. Wenn es sich bei diesem um "text/plain" handelt, kann dieser mit bp.getContent() einfach ausgegeben werden. Ist dem nicht so, gibt es auch keinen String. Dafür gibt es aber bp.getInputStream().
Tja, ich habs mal mit BASE64DecoderStream bds = new BASE64DecoderStream(isAusBp); probiert, da meckert er aber rum, und ich kann mir schon gut denken, dass es daran liegt, dass der Anhang in mehrere Zeilen aufgeteilt wurde.
Nun ja, jetzt bin ich mit meinem Latein endgültig am Ende und brauche eure Hilfe. Wäre echt nett von euch, wenn ihr da was machen könntet.
GreeetZ
//EDIT: Diese Fehlermeldung bekomme ich:
Exception in thread "main" java.lang.IllegalArgumentException: specified data is not base64 encoded
at org.apache.jackrabbit.util.Base64.decode(Base64.java:274)
at org.apache.jackrabbit.util.Base64.decode(Base64.java:184)
at org.apache.jackrabbit.util.Base64.decode(Base64.java:198)
at Anwendung.main(Anwendung.java:100)
Der entsprechende Code:
Java:
Multipart inhalt = (MimeMultipart) msg.getContent();
for(int i = 0; i < inhalt.getCount(); i++)
{
BodyPart bp = inhalt.getBodyPart(i);
if(bp.getContentType().startsWith("text/plain") == false)
{
InputStream is = bp.getInputStream();
BASE64DecoderStream bds = new BASE64DecoderStream(is);
}
}
//EDIT2:
Hab schon versucht, den InputStream mit StringBuilder in einen String umzuwandeln. Ergebnis: ein langer Binärstring, 16 KB groß, die Originaldatei ist aber 24 KB groß. Hab jetzt aber mal beide Dateien verglichen und sie enthalten beide folgende Zeilen:
PK{BINÄRCODE}[Content_Types].xml
Also scheinbar funktioniert es irgendwie, nur dass eben 8 KB fehlen
Zuletzt bearbeitet: