Autor Thema: CORBA/Java Notesmail gesendet - Anzeigeproblem Attachmentname (Umlaute)  (Gelesen 4466 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
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)
Code
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„stestá 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:
Code
Content-Type: application/vnd.ms-excel; name="Liqiditötästüestß eins.xls"
Content-Transfer-Encoding: base64

0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAA
EAAAQwAAAAEAAAD+////AAAAAAAAAAD/////////////////////////////////////////////
...
« Letzte Änderung: 27.03.09 - 09:01:19 von magic_halli »
Lotus Notes 8.0.2

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Junger Mann, tun Sie den Filenamen RFC-konform gemäß der "MIME encoded-word syntax" encoden, dann klappts auch mit der Anzeige. ;)

Siehe: NotesMimeEntity Umlaute im Header


P.S.: Wenn Du Dich schon so oft mit dem Thema Mail herumschlägst, wäre es nicht schlecht, wenn Du Dir mal die entsprechenden RFC reinziehen würdest (2821, 2822 sowie die dazugehörigen MIME-RFCs). Das hilft enorm.
« Letzte Änderung: 27.03.09 - 09:11:07 von m3 »
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
RFC sind keine NaturGesetze, sondern der kleinste gemeinsame Nenner.
Sie entstehen in kuriosen Meetings von nach fragwürdigen Gesichtspunkten zusammengestellten Personen.
Und zwar in einer anderen Zeit.

Grundsätzlich sollten moderne Mailsysteme mit solchen Encoding-Problemen umgehen können.

In der Projektrealität liefert aber so ein RFC so etwas wie eine Rückfallposition.

jakarta.commons.Fileuploader kennt im Interface org.apache.commons.fileupload.FileItem.getValue(String encoding). In den implementierenden Klassen ist das encoding, mit dem der Wert des Feldes ausgelesen werden soll, parametrisierbar.
Vielleicht schaust du dir mal den entsprechenden Source code an.


Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Zitat
Vielleicht schaust du dir mal den entsprechenden Source code an.
hab schon.

Bin mir nicht sicher. Aber:
Code
   
 child.setContentFromBytes(attach, contentType + "; name=\"" + new String(filename, <dasVerwendeteEncoding>) + "\"",
                                      MIMEEntity.ENC_IDENTITY_BINARY);

<dasVerwendeteEncoding> könnte sein: "ISO-8859-1"


« Letzte Änderung: 27.03.09 - 10:43:53 von Pitiyankee »
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
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).

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:
Code
Content-Type: application/vnd.ms-excel; name="Liqidit=F6t=E4st=FCest=DF eins.xls"
Content-Transfer-Encoding: base64
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Zitat
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:
Code
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:
Code
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:
Code
Content-Type: application/vnd.ms-excel; name="Liqidit=F6t=E4st=FCest=DF eins.xls"
Was soll denn hierbei falsch sein?
« Letzte Änderung: 27.03.09 - 11:57:59 von magic_halli »
Lotus Notes 8.0.2

Offline flaite

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.966
    • mein del.icio.us
Ich probiere immer erst mit den Standardmitteln rum und informiere mich, wenn das irgendwie doch anders ist.  ;D
Wie Martin  sagt: Such dir etwas fertiges, das das implementiert oder schreibs selber.
Ich stimm nicht mit allen überein, aber mit vielen und sowieso unterhaltsam -> https://www.youtube.com/channel/UCr9qCdqXLm2SU0BIs6d_68Q

---

Aquí no se respeta ni la ley de la selva.
(Hier respektiert man nicht einmal das Gesetz des Dschungels)

Nicanor Parra, San Fabian, Región del Bio Bio, República de Chile

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Ich probiere immer erst mit den Standardmitteln rum und informiere mich, wenn das irgendwie doch anders ist.  ;D
Wie Martin  sagt: Such dir etwas fertiges, das das implementiert oder schreibs selber.
Meine Implementierung ist größtenteils aus der DominoHilfe entnommen und zusammengebaut. Von daher nutze ich ja bereits "fertige Implementierungen" bzw. Standardmittel, um mittels CORBA ein Maildokument zu erstellen und zu senden, inkl. Attachments!
Lotus Notes 8.0.2

Offline m3

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Code
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.

HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz