Hallo,
ich arbeite am erstellen/senden einer Mail via Corba an den Domino. Fast alles klappt nun perfekt, bis auf die Darstellung des Attachmentname in der Mail im Notes-Posteingang bzw. Gesendet-Ordner.
Probleme machen nur Attachmentnamen mit Umlauten - ä, ö, ü und ß!
Hier mal der betreffende Code, wo ich Attachments hinzufüge und anschließend das Maildokument sende:
('email' im Code ist hierbei ein eMail-Object, welches alle nötigen eMail-Daten bereitstellt. Diese werden einfach nur noch ausgelesen und gesetzt)
Document memo = db.createDocument();
memo.replaceItemValue("Form", "Memo");
MIMEEntity mime = memo.createMIMEEntity();
...
// Anlagen anhängen --> 2..n.Child
if (email.getAttachments().size() > 0) {
for (int i = 0; i < email.getAttachments().size(); i++) {
Stream attach = s.createStream();
MIMEEntity child = mime.createChildEntity();
byte[] bytes = email.getAttachments().get(i).getBinary();
String filename = email.getAttachments().get(i).getFilename();
String contentType = email.getAttachments().get(i).getContentType();
attach.write(bytes);
if (attach.getBytes() != 0) {
child.setContentFromBytes(attach, contentType + "; name=\"" + filename + "\"",
MIMEEntity.ENC_IDENTITY_BINARY);
}
else {
System.out.println("FileStream has no content");
}
attach.close();
}
}
memo.setSaveMessageOnSend(true);
// Mail senden an RECIPIENT oder MULTIPLE RECIPIENTS
// multi ist hierbei ein Vector<String>
memo.send(false, multi);
Beim senden einer Test-Datei, wo der 'filename' "Liqiditötästüestß eins.xls" lautet, wird diese Datei korrekt in der Mail im Notes-Posteingang eingebunden - lässt sich auch korrekt öffnen - nur der Anzeigename und somit auch Dateiname lautet hier nun "Liqidit”t„stestá eins.xls" !!! :-:
Im Header wiederrum ist der Dateiname korrekt mit allen Umlauten gesetzt.
Wie kann ich diesem Problem auf die Schliche kommen?
Wo könnte ich ansetzen - ist hierzu bereits irgendwas bekannt?
Danke und Gruß
Rico.
EDIT: Der Header zum Attachment beginnt so:
Content-Type: application/vnd.ms-excel; name="Liqiditötästüestß eins.xls"
Content-Transfer-Encoding: base64
0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
EAAAQwAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////////////
...
Vielleicht schaust du dir mal den entsprechenden Source code an.
hab schon.
Bin mir nicht sicher. Aber:
child.setContentFromBytes(attach, contentType + "; name=\"" + new String(filename, <dasVerwendeteEncoding>) + "\"",
MIMEEntity.ENC_IDENTITY_BINARY);
<dasVerwendeteEncoding> könnte sein: "ISO-8859-1"
Pitiyankee, klar sind RFC nicht der Weisheit letzter Schluss, aber wenn man Code schreibt, der Mails erzeugt, sollte man entweder die RFCs lesen, verstehen und umsetzten, oder entsprechende fertige Klassen benutzen, die das für einen Übernehmen.
Und herumgeraten bzw. in irgendwelchen Sourcecodes braucht man hier nicht herumstöbern, sondern muss nur RFC2822 lesen. Dort steht nämlich, dass alle Werte, die nicht aus ASCII-Werten bestehene, gemäß der MIME encoded-word Syntax (RFC 2047) kodiert werden müssen (Kapitel 3.2.5. Quoted strings (http://tools.ietf.org/html/rfc2822#section-3.2.5)).
Wenn man eine E-Mail so erzeugt, sollten jedes moderne Mailingsystem problemlos damit umgehen können. Das hat nix mit Encodings, et al zu tun.
So wärs richtig:
Content-Type: application/vnd.ms-excel; name="Liqidit=F6t=E4st=FCest=DF eins.xls"
Content-Transfer-Encoding: base64
Junger Mann, tun Sie den Filenamen RFC-konform gemäß der "MIME encoded-word syntax" encoden, dann klappts auch mit der Anzeige.
Ich hab jetzt gelesen und gemacht... ich bekomm den sch*** 'String filename' nicht encoded mittels Java/CORBA. :'(
Vielleicht setze ich aber auch an der falschen Stelle an?!
Muss ich einfach nur den String 'filename' als solchen encoden/verschlüsseln, oder aber mit dem MIMEEntity 'child' arbeiten?
Irgendwie hab ich langsam Durchzug im Kopf mit diesen elenden encoden/decoden MIME hickhack... sorry. :-[
Rico.
EDIT: Also ich bin mir eigentlich ziemlich sicher, dass ich direkt nach der Zeile:
child.setContentFromBytes(attach, contentType + "; name=\"" + filename + "\"",
MIMEEntity.ENC_IDENTITY_BINARY);
den Header von dem 'child' encoden muss.
Meine Versuche den child-Headereintrag zu manipulieren, ala:
header = child.getNthHeader("Content-Type");
header.setHeaderValAndParams(header.getHeaderValAndParams(false,true)); // versch. Varianten getestet (true/false)
bleiben jedoch erfolglos. Ich bekomme einfach keine Anzeige der Art:
Content-Type: application/vnd.ms-excel; name="Liqidit=F6t=E4st=FCest=DF eins.xls"
Was soll denn hierbei falsch sein?
child.setContentFromBytes(attach, contentType + "; name=\"" + Convert2EncodedWord(filename) + "\"",
MIMEEntity.ENC_IDENTITY_BINARY);
Wobei Du halt noch die Funktion "Convert2EncodedWord" schreiben bzw. eine entsprechende Bibliotheksfunktion finden musst.
Und IBM ist dafür bekannt, nicht-ASCII Themen keine große AUfmerksamkeit zu schenken. Auch nicht in der Hilfe.