Autor Thema: NotesMimeEntity Umlaute im Header  (Gelesen 5164 mal)

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
NotesMimeEntity Umlaute im Header
« am: 17.03.09 - 11:28:02 »
Hi,

ich extrahiere aus einer MIME-Mail die Anhänge (sind vom ContentTyp 'application'). Das klappt soweit auch prima.
Der Dateiname des "MIME-Anhangs" steht ja im Header drin.
Um an den Dateinamen des Anhangs zu kommen, lese ich den Header aus und hole mir den ParamValue 'name':
Code
...
Dim child As NotesMIMEEntity
Dim header As NotesMimeHeader
Dim filename As String
...
Set header = mime.GetNthHeader("Content-Type")
filename = header.GetParamVal("name")
Klappte bisher immer, d.h. es stand bisher immer ein korrekter Dateiname drin, bspw. "Test.xls" etc.

Jetzt ist ein Fall aufgetreten, wo eine Datei "Liquidität.xls" dranhängt. Jetzt ist der Wert vom MIMEEntity im ParamVal 'name' bzw. in filename:
Code
=?iso-8859-1?Q?Liquidit=E4t.xls?=

Somit kann diese Datei erstmal nicht extrahiert werden!!!

Woran liegt das, dass der Dateiname so im Header steht? (Umlaut?)
Das wäre doch dann ein Problem von Notes beim Mailempfang, oder?
Wie bekomme ich wieder einen normalen Dateinamen?


Danke und Gruß

Rico.
Lotus Notes 8.0.2

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: NotesMimeEntity Umlaute im Header
« Antwort #1 am: 17.03.09 - 11:39:06 »
Seufz.
Wenn Du Dich schon mit MIME und MIME-Anhängen beschäftigst, würde ich empfehlen, dass Du Dich auch mit den entsprechenden RFCs auseinandersetzt. Das, was Du da siehst, ist absolut Standardkonform und wird auch von Notes verstanden.

Zitat
MIME encoded-word syntax (RFC 2047)
This syntax uses a string of ASCII characters indicating both the original character encoding (the "charset") and the content-transfer-encoding used to map the bytes of the charset into ASCII characters.

The form is: "=?charset?encoding?encoded text?=".

    * charset may be any character set registered with IANA. Typically it would be the same charset as the message body.
    * encoding can be either "Q" denoting Q-encoding that is similar to the quoted-printable encoding, or "B" denoting base64 encoding.
    * encoded text is the Q-encoded or base64-encoded text.

Request for Comments: 2047
MIME (Multipurpose Internet Mail Extensions) Part Three: Message Header Extensions for Non-ASCII Text

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
Re: NotesMimeEntity Umlaute im Header
« Antwort #2 am: 17.03.09 - 12:39:27 »
Mag sein, dass das absolut Standardkonform ist und auch von Notes verstanden wird. Daran zweifel ich auch nicht.
Aber, wie schon gesagt, mein Problem ist der Header vom Attachment:
Code
Content-Type: application/vnd.ms-excel;
		 name="=?iso-8859-1?Q?Liquidit=E4t.xls?="
Content-Disposition: attachment;
		 filename="=?iso-8859-1?Q?Liquidit=E4t.xls?="
Content-Transfer-Encoding: base64
Ganz ehrlich, mich hat der Link nicht sonderlich weitergebracht für mein filename-Problem.
Ich will ja "nur" den 'filename' in lesbarer Formatierung auslesen. Ich hab leider keine Idee, wo ich wie ansetzen soll, wenn dieser wie hier aussieht.  :-[

Eigentlich sollten doch die Umlaute vom Anhang-Name in 'filename' auch als Umlaute drin stehen? Ist das vielleicht eine Einstellungssache von Notes in Hinsicht auf eine eingehende Mail, sodass man solche Formatierungen bereits serverseitig handeln kann?

Rico.
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: NotesMimeEntity Umlaute im Header
« Antwort #3 am: 17.03.09 - 14:10:57 »
Erkenntnis:
Ich benutze 'header.GetParamVal("name")', um mir aus dem Header den Value (=filename) zum Parameter 'name' zu holen. Leider enthält diese Methode keine optionale Angabe zur Decodierung!

Die Methode 'GetHeaderValAndParams' hingegen enthält eine Option zur Decodierung von RFC-2047 Codierungen. Allerdings gibt diese Methode den kompletten Header zurück! Mist - ich brauche nur den Parameter 'name'.

Ist jemand eine Möglichkeit bekannt, wie ich vielleicht einfach einen Header-ParameterValue decodieren kann?

Rico.
Lotus Notes 8.0.2

Offline magic_halli

  • Senior Mitglied
  • ****
  • Beiträge: 348
  • Geschlecht: Männlich
Re: NotesMimeEntity Umlaute im Header
« Antwort #4 am: 17.03.09 - 14:31:55 »
Hab mein Problem behoben. Evtl. RFC-2047 codierte Header werden decodiert und einfach neu gesetzt. Bei Nicht-RFC-2047 Headern bleibt der 'name' dann sowieso gleich.
Code
...
Dim child As NotesMIMEEntity
Dim header As NotesMimeHeader
Dim filename As String

Set header = child.GetNthHeader("Content-Type")
header.SetHeaderValAndParams(header.GetHeaderValAndParams(False,True))
filename = header.GetParamVal("name")
Das Dokument wird ja eh nicht gespeichert, von daher kann ich den Header für meinen Zwecks ruhig neu setzen?!
Klappt! Ob es hierfür noch eine weiter Lösung gibt... keine Ahnung.


Rico.
« Letzte Änderung: 17.03.09 - 14:34:15 von magic_halli »
Lotus Notes 8.0.2

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz