Umlaute mit MIMEMessage:attachFile()
Moderator: Moderatoren
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Umlaute mit MIMEMessage:attachFile()
Hi Leute,
um eine Datei per E-Mail via MIMEMessage:attachFile() versenden zu können, muss ein ANSI-Dateiname übergeben werden. Auf der Empfängerseite werden anschliessend in der Liste der Anhänge die Umlaute im Dateiname als schwarze Raute mit Fragezeichen angezeigt.
Hat jemand diesen Konflikt gelöst?
um eine Datei per E-Mail via MIMEMessage:attachFile() versenden zu können, muss ein ANSI-Dateiname übergeben werden. Auf der Empfängerseite werden anschliessend in der Liste der Anhänge die Umlaute im Dateiname als schwarze Raute mit Fragezeichen angezeigt.
Hat jemand diesen Konflikt gelöst?
Gruß Klaus
Re: Umlaute mit MIMEMessage:attachFile()
ConvToAnsiCp() oder ConvToOemCp() ?
ConvToAnsiCp() brauche ich in meinen Mail-Funktionen.
ConvToAnsiCp() brauche ich in meinen Mail-Funktionen.
-
- Der Entwickler von "Deep Thought"
- Beiträge: 2518
- Registriert: Mi, 28. Jul 2010 17:16
- Hat sich bedankt: 12 Mal
- Danksagung erhalten: 77 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Ja, gelöst durch eine Funtion welche in den Dateinamen lediglich a-z 0-9 sowie die Zeichen -_. zulässt und alle anderen Zeichen entsprechend ersetzt und die Datei zur weiteren Verwendung automatisch umbenennt .
Gruss Carlo
Gruss Carlo
Valar Morghulis
Gruss Carlo
Gruss Carlo
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Danke,
@Roland: Das trifft das Problem leider nicht. Dieses entsteht dadurch, dass für das Einlesen der Datei der Dateiname in ANSI , für die Anzeige im MailClient jedoch in UTF8 benötigt wird.
@Carlo: So habe ich mir auch beholfen, nur gefallen mir Aufwand und Ergebnis nicht.
Der Support hat eine Lösung mit einer undokumentierten Methode gesandt. Mit ihr funktionieren die Umlaute, es gibt aber noch ein Problem mit der Darstellung des Inhalts. Ich informiere euch, sobald wir die Lösung haben.
@Roland: Das trifft das Problem leider nicht. Dieses entsteht dadurch, dass für das Einlesen der Datei der Dateiname in ANSI , für die Anzeige im MailClient jedoch in UTF8 benötigt wird.
@Carlo: So habe ich mir auch beholfen, nur gefallen mir Aufwand und Ergebnis nicht.
Der Support hat eine Lösung mit einer undokumentierten Methode gesandt. Mit ihr funktionieren die Umlaute, es gibt aber noch ein Problem mit der Darstellung des Inhalts. Ich informiere euch, sobald wir die Lösung haben.
Gruß Klaus
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
Eigentlich sollte die Methode den ANSI Namen nutzen um die Datei auf dem lokalen Rechner zu lesen, aber an MIME als UTF8 übergeben.
Wenn diese das nicht tut ...
Wenn diese das nicht tut ...
Gruß
Hubert
Hubert
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Guten Morgen,
die Lösung funktioniert nun Dank der kräftigen und zeitnahen Hilfe von Alaskas Support. Das Problem wird im PDR 6351 beschrieben. Wer nähere Infos braucht, kann sich gerne per PN melden.
die Lösung funktioniert nun Dank der kräftigen und zeitnahen Hilfe von Alaskas Support. Das Problem wird im PDR 6351 beschrieben. Wer nähere Infos braucht, kann sich gerne per PN melden.
Gruß Klaus
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Hallo Klaus !
Dafür ist doch ein Forum da.
Hubert könnte das dann ins Archiv stellen
Warum stellst du die Lösung (in Schritten) nicht hier ein?Wer nähere Infos braucht, kann sich gerne per PN melden.
Dafür ist doch ein Forum da.
Hubert könnte das dann ins Archiv stellen
--
Hans-Peter
Hans-Peter
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Hallo HaPe,
da die Lösung von Alaska stammt und von mir nur angepasst und ein wenig ergänzt wurde, habe ich beim Support nachgefragt, ob ich diese in's Forum stellen können. Als Antwort bekam ich den Verweis auf die PDR. Keine Ahnung wie das urheberrechtlich zu bewerten ist. Vielleicht gibt es auch eine Übereinkunft zwischen dem Forum und Alaska? Kann jemand vom Vorstand etwas dazu sagen?
da die Lösung von Alaska stammt und von mir nur angepasst und ein wenig ergänzt wurde, habe ich beim Support nachgefragt, ob ich diese in's Forum stellen können. Als Antwort bekam ich den Verweis auf die PDR. Keine Ahnung wie das urheberrechtlich zu bewerten ist. Vielleicht gibt es auch eine Übereinkunft zwischen dem Forum und Alaska? Kann jemand vom Vorstand etwas dazu sagen?
Gruß Klaus
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
Moin Klaus,
es gibt keine diesbezügliche Übereinkunft!
Wenn Alaska möchte, dass auf den PDR verwiesen wird, dann ist das so hinzunehmen.
Habt ihr euch den PDR schon mal angeschaut?
Viele Grüße,
Martin
es gibt keine diesbezügliche Übereinkunft!
Wenn Alaska möchte, dass auf den PDR verwiesen wird, dann ist das so hinzunehmen.
Habt ihr euch den PDR schon mal angeschaut?
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
Hier mal der deeplink: http://www.alaska-software.com/scripts/ ... PDRID=6351
Der dort unter Solution gepostete Code dürfte auch das sein, was Klaus von Alaska erhalten hat.
Viele Grüße,
Martin
Der dort unter Solution gepostete Code dürfte auch das sein, was Klaus von Alaska erhalten hat.
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Moin Martin,
sie waren so freundlich zusätzlich eine Funktion, welche die Funktion im PDR anwendet, zu liefern.
sie waren so freundlich zusätzlich eine Funktion, welche die Funktion im PDR anwendet, zu liefern.
Gruß Klaus
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
Wenn Alaska auf die Anfrage auf den PDR verweist, dann müssen wir das so hinnehmen. Grundsätzlich ist das ja auch OK so, denn warum sollte das doppelt gepostet werden? Als PDF bei Alaska und bei uns im Forum? nach dem Hinweis von Klaus auf den PDR kann ja jeder hier nachschauen, worum es da geht und wie man mit dem Problem umgehen kann.
Ich denke aber auch das nichts dagegen spricht, wenn Klaus hier seinen Code postet mit seinen Anpassungen des PDR-Codes inkl. dem Hinweis warum genau er das so angepasst hat. Denn DAS könnte ja in der Tat etwas sein was hier alle interessiert. Und er PDR nicht hergeben kann.
Jan
Ich denke aber auch das nichts dagegen spricht, wenn Klaus hier seinen Code postet mit seinen Anpassungen des PDR-Codes inkl. dem Hinweis warum genau er das so angepasst hat. Denn DAS könnte ja in der Tat etwas sein was hier alle interessiert. Und er PDR nicht hergeben kann.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
der Kern besteht tatsächlich aus der Funktion im PDR. Die Schritte darum sind:
- Inhalt der Anhang-Datei mit FRead einlesen
- eingelesenen Inhalt mit Bin2Base64 umwandeln
- korrekten Typ für MimeContent():new() mit der Dateiendung nach 'application/' und EncodeHeader(Dateiename) nach 'name=' erstellen
- MimeContent():new( umgewandelter Inhalt, Typ, 'base64' ) aufrufen
- das erzeugte Objekt mit ::attachMixed anstelle von ::attachFile als Anhang übergeben.
Gruß Klaus
Re: Umlaute mit MIMEMessage:attachFile()
@Klaus
wenn es funktioniert...
Es geht um den Dateinamen und die ganze Datei muss gewandelt werden?
Das kann es doch nicht sein - Umwandlung des Dateiinhalts nur um Umlaute in den Dateinamen zu bringen.
Da würde ich Nebenwirkungrn erwarten beim Versand von Binärdaten.
Würd ich nie machen. Dann lieber einen anderen Weg suchen.
wenn es funktioniert...
Es geht um den Dateinamen und die ganze Datei muss gewandelt werden?
Das kann es doch nicht sein - Umwandlung des Dateiinhalts nur um Umlaute in den Dateinamen zu bringen.
Da würde ich Nebenwirkungrn erwarten beim Versand von Binärdaten.
Würd ich nie machen. Dann lieber einen anderen Weg suchen.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
Moin Roland,
Viele Grüße,
Martin
Da kann ich Dich beruhigen - Umwandlung in MIME ist beim Versand von Dateien (nicht nur bei Binärdateien) als Mailanhang eigentlich Pflicht - alles andere geht eh nicht (also Versand per Mail ohne Umwandlung)!
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Martin Altmann
- Foren-Administrator
- Beiträge: 16555
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
Für die Ungläubigen unter Euch: https://de.wikipedia.org/wiki/Multipurp ... Extensions
Viele Grüße,
Martin
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
Re: Umlaute mit MIMEMessage:attachFile()
Dann ist die Vorgehensweise ja eher normal und kein Workaround. Und da gibt es immer noch keine Funktion in Xbase++ die das am Stück erledigt...?
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
wie Martin schrieb, ist das immer so, dass ALLE Daten die mehr als 7 bit ASCII Zeichen benötigen, bei eMails in ein Format gewandelt werden müssen, das nur noch 7 bit ASCII Zeichen enthält.
Das Standardverfahren bei eMail ist base64.
Die Methode attachFile() macht genau das mit dem Dateiinhalt, nämlich umwandeln nach base64 Format und anhängen ...DelUser01 hat geschrieben:Dann ist die Vorgehensweise ja eher normal und kein Workaround. Und da gibt es immer noch keine Funktion in Xbase++ die das am Stück erledigt...?
lediglich beim Dateinamen wurde die Umwandlung von OEM / Ansi nach UTF8 vergessen - oder die Umsetzung der Methode ist älter als "Umlaute in Dateinamen sind erlaubt"
Egal wie, die vorgestellte Lösung korrigiert nur den Dateinamen ... aber der Hinweis notfalls die EXE auf ANSI und dann wieder zurück umzustellen ist nicht sinnvoll
Wenn die EXE Ansi ist, kann man direkt den Fehler des Dateinamens so verbessern:
cUtf8FileName := Bin2Base64(Char2Utf8(cStr))
wenn die EXE auf OEM steht, sollte die neue Funktion Char2Utf8(cOemStr) dennoch einen richtigen UTF8 String erzeugen, aber es könnte sein, dass der ANSI Name aus directory() zuerst noch nach OEM umgesetzt werden muss, da eine Funktion nicht erkennt, ob ANSI im String ist oder nicht, es geht rein um die OEM / Ansi Einstellung des Programmes:
dann müsste man also statt ...Char2UTF8()
Convert an OEM/ANSI encoded character string to an UTF8 encoded character string
Char2UTF8( <cString>] ) --> utf8String
wenn die EXE auf OEM steht ....cUtf8FileName := Bin2Base64(Char2Utf8(cStr))
Code: Alles auswählen
cOemStr := convToOemCP(cAnsiStr)
cUtf8FileName := Bin2Base64(Char2Utf8(cOemStr))
Ich habe früher meine eigenen Funktionsbibliothek in OEM und ANSI Quellcode vorgehalten, das mache ich jetzt nicht mehr, unterscheide mit diesen Funktionen ...
Code: Alles auswählen
// besser wäre es die Parameter 1 und 0 gleich durch die Konstanten aus COLLAT.CH zu ersetzen,
// aber ich glaube nicht, dass sich diese hier ändern ;-)
// #define CHARSET_OEM 1
// #define CHARSET_ANSI 0
*--------------------------------------------------------------------------------
function IsOEM()
return ( set(_SET_CHARSET) = 1 )
*--------------------------------------------------------------------------------
function IsAnsi()
return ( set(_SET_CHARSET) = 0 )
Code: Alles auswählen
// directory liefert immer ANSI Namen ... Vorsicht, bei OEM EXE, hier werden je nach Aufgabe entweder OEM oder ANSI Version benötigt !
cAnsiFileName := aFiles[x,F_NAME]
if IsOEM()
cOemFileName := convToOemCP(cFileName)
endif
... nimm was du brauchst ....
cAnsiFileName
cOemFileName
ein Quellcode für beide Welten
Gruß
Hubert
Hubert
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Hallo Hubert,
da ich kongurierend mit einer Clipper-Anwendung auf die Daten zugreife, arbeite ich vorsichtshalber mit OEM. Daher der Hinweis ggf. auf ANSI umzustellen.
da ich kongurierend mit einer Clipper-Anwendung auf die Daten zugreife, arbeite ich vorsichtshalber mit OEM. Daher der Hinweis ggf. auf ANSI umzustellen.
Gruß Klaus
- Klaus Schuster
- Foren-Administrator
- Beiträge: 371
- Registriert: Do, 24. Jan 2008 10:01
- Wohnort: 90762 Fürth
- Hat sich bedankt: 9 Mal
- Danksagung erhalten: 9 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Ein schöner Seiteneffekt davon, dass der Inhalt vorab eingelesen wird, ist, dass man der E-Mail einen abweichenden Namen für die Datei mitgeben kann. Ich verwende zur zeitlichen Steuerung von Dateien eine Angabe des Zeitraums im Dateinnamen: DateiName[TT.MM.JJJJ-TT.MM.JJJJ].xxx. Das sieht in der Mail natürlich für den Endkunden nicht gut aus. Mit dem Seiteneffekt kein Problem mehr. Ebenso können Pfadangaben entfernt werden, usw.
Gruß Klaus
- brandelh
- Foren-Moderator
- Beiträge: 15707
- Registriert: Mo, 23. Jan 2006 20:54
- Wohnort: Germersheim
- Hat sich bedankt: 71 Mal
- Danksagung erhalten: 38 Mal
- Kontaktdaten:
Re: Umlaute mit MIMEMessage:attachFile()
ich meinte es spricht nichts gegen die OEM EXE, aber nicht für den Bereich die EXE Einstellung ändern,Klaus Schuster hat geschrieben: ↑Mi, 07. Mär 2018 17:49 arbeite ich vorsichtshalber mit OEM. Daher der Hinweis ggf. auf ANSI umzustellen.
sondern diese ermitteln (falls man sicher gehen will) und mit ConvToAnsiCP() etc. die Umwandlung direkt verwenden, wenn man diese benötigt !
Gruß
Hubert
Hubert
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Umlaute mit MIMEMessage:attachFile()
Code: Alles auswählen
// Implement overloaded MimeMessage class
CLASS MyMIMEMessage FROM MIMEMessage
EXPORTED
METHOD attachFile
ENDCLASS
//
// Overload method :attachFile().
// This implementation always encodes using base64.
// Alos, this method accepts the encoding-type.
//
METHOD MyMIMEMessage:attachFile( cFileName, cType )
LOCAL nHandle, nBytes, nLen, cBuffer
// Read the file if possible
IF ! FILE( cFileName ) .or. (nHandle := fopen(cFileName, FO_READ)) == -1
RETURN .F.
ENDIF
// Request buffer of required size
nBytes := FSize( nHandle )
cBuffer := Space( nBytes )
// Read the file
nLen := FRead( nHandle, @cBuffer, nBytes )
// Close File
FClose( nHandle )
IF nLen != nBytes
RETURN .F.
ENDIF
default cType to "application/" + substr(cFileName, rat(".", cFileName) + 1) + "; name=" + Char2UTF8(dateiname(cFileName))
// Attach buffer contents mixed
::MIMEContent:attachMixed( MIMEContent():encodeBase64( cBuffer, cType ) )
RETURN .T.
function dateiname(cDatei) // gibt den reinen Dateinamen ohne evtl. Pfad zurück
cDatei := alltrim(substr(cDatei, rat("\", cDatei) + 1))
return substr(cDatei, rat("/", cDatei) + 1) // falls "/" vorkommt
Code: Alles auswählen
oMail := MyMIMEMessage():encodeQuotedPrintable( Char2UTF8(cBody), "text/html; charset=UTF-8")
oMail:attachFile("öäüß.pdf")
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>