Verbesserung: Korrekte Codierung (iso-8859-1) der Mails

Diskussion zum Formular-Modul für ConPresso 4
Antworten
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Verbesserung: Korrekte Codierung (iso-8859-1) der Mails

Beitrag von Mr. Magpie »

Um zu erreichen, dass Umlaute im Mail-Body und in der Betreffzeile korrekt codiert werden, sind ein paar wenige Änderungen an der Datei ../mod_form/includes/actions.inc.php nötig.

Man suche in der genannten Datei bei Zeile 239 den Abschnitt

Code: Alles auswählen

			// Mail an Admin?
			if ($activeModules[$directory]['mail']=="yes")
			{
				$empfaenger = $activeModules[$directory]['recipient'];
				$betreff = $activeModules[$directory]['mail_prefix'].sprintf($activeModules[$directory]['subject'],$data['titel']);
				$header = 'From: '. $data['email'] . $newline .
				   'Reply-To: '.$data['email'] . $newline .
				   'X-Mailer: mod_form by conpresso4.de via PHP/' . phpversion();

				mail($empfaenger, $betreff, $nachricht, $header);
			}
und ersetze diesen durch:

Code: Alles auswählen

			// Mail an Admin?
			if ($activeModules[$directory]['mail']=="yes")
			{
				$empfaenger = $activeModules[$directory]['recipient'];
				$betreff = $activeModules[$directory]['mail_prefix'].sprintf($activeModules[$directory]['subject'],$data['titel']);
				$betreff = preg_replace('~([\xA0-\xFF])~e', '"=" . strtoupper(dechex(ord("$1")))', $betreff);
				$betreff = '=?ISO-8859-1?Q?' . $betreff . '?=';				
				$header = 'From: '. $data['email'] . $newline .
				   'Reply-To: '.$data['email'] . $newline .
				   'Content-Type: text/plain; charset=iso-8859-1' . $newline .
				   'X-Mailer: mod_form by conpresso4.de via PHP/' . phpversion();

				mail($empfaenger, $betreff, $nachricht, $header);
			}
Nur wenige Zeilen darunter ist der Abschnitt

Code: Alles auswählen

					// Bestätigungs-Mail
					$empfaenger = $data['email'];
					$betreff = sprintf($activeModules[$directory]['subject'],$data['titel']);
					$header = 'From: '. $data['email'] . $newline .
					   'Reply-To: '.$data['email'] . $newline .
					   'X-Mailer: mod_form by conpresso4.de via PHP/' . phpversion();
zu ersetzen mit:

Code: Alles auswählen

					// Bestätigungs-Mail
					$empfaenger = $data['email'];
					$betreff = sprintf($activeModules[$directory]['subject'],$data['titel']);
					$betreff = preg_replace('~([\xA0-\xFF])~e', '"=" . strtoupper(dechex(ord("$1")))', $betreff);
					$betreff = '=?ISO-8859-1?Q?' . $betreff . '?=';				
					$header = 'From: '. $data['email'] . $newline .
					   'Reply-To: '.$data['email'] . $newline .
					   'Content-Type: text/plain; charset=iso-8859-1' . $newline .
					   'X-Mailer: mod_form by conpresso4.de via PHP/' . phpversion();
Das war's schon.

Das Gesagte gilt für die Version 4.1b von mod_form. Ältere bzw. künftige Versionen können analog geändert werden.
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Daß dies bei möglicher falscher Darstellung von Umlauten erforderlich ist, leutet mir ein.
Aber ist es denn so?
Ich habe sehr viele Formulare im Einsatz und noch nie wurde dort ein Umlaut falsch kodiert.
Vielleicht suchen wir mal die Ursache statt die Symptome zu bekämpfen.
Welche Codierung verwendet der Webauftritt?
Und welche der Server?
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Daß dies bei möglicher falscher Darstellung von Umlauten erforderlich ist, leutet mir ein.
Aber ist es denn so?
Mir ist es im Thunderbird aufgefallen, siehe angehängten Screenshot, bei dem die Nachricht nur aus deutschen Umlauten besteht.
Du kannst natürlich argumentieren, dass der Mailer auf die falschen Standard-Codierungen eingestellt (UTF-8) ist, aber dies kann ja auch bei anderen der Fall sein.
Der versendende Server ist www.efco.de. Welche weiteren Infos brauchst du konkret noch?
Dateianhänge
screenshot.jpg
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Habe extra Firebird installiert und kann vergleichbares nicht beobachten :?

Bei Dir fällt mir allerdings auf, daß, obwohl Du 4.1b verwendest, im Formular-Tag

Code: Alles auswählen

enctype="multipart/form-data"
fehlt.

Das ist da extra mit drin, weil die Codierung von Sonderzeichen sonst oft Probleme bereitet...
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Der Server benutzt noch die beta3-Version von mod_form. Wg. der darin noch fehlenden Captchas wird dies in allernächster Zeit upgedatet.

Die enctype-Angabe befindet sich ja in der form.inc.php der Version 4.1b. Deshalb fehlt sie in den Formularen, die du siehst. Die Mail, deren Screenshot ich oben gepostet habe, wurde aber mit einer Testinstallation der Version 4.1b erzeugt, sodass das Formular die genannte enctype-Angabe enthält (habe ich überprüft). Dennoch kommt es zu der mangelhaften Codierungserkennung in Thunderbird, da der Mailquelltext ohne meine Änderungen an actions.inc.php keinerlei Kodierungsangaben enthält (s. Anhang).
Dateianhänge
Mailquelltext.txt
(1.96 KiB) 621-mal heruntergeladen
Günther Ludwig
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Der angehängte Quelltext enthält gar keine Umlaute (ich sehe nur Fragezeichen), also werden sie wohl schon vom Server unterschlagen.
Werden die Formulardaten auch als Artikel gespeichert? Sind dort die Umlaute vorhanden?

Ich will ja gar nichts gegen Deine Modifikation sagen, nur scheint sie normalerweise entbehrlich zu sein.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Benutzeravatar
Mr. Magpie
ConPresso-Profi
Beiträge: 1004
Registriert: 01.01.1970 01:00
Wohnort: Wuppertal
Hat sich bedankt: 274 Mal
Danksagung erhalten: 59 Mal

Beitrag von Mr. Magpie »

Wie schon erwähnt, ist mein Thunderbird auf Unicode (UTF-8) eingestellt und behandelt Mails, die keine Angaben zu ihrer Kodierung enthalten, als wären sie in UTF-8 kodiert.
Die Fragezeichen in obigem Quelltext sind nur die textlichen Entsprechungen für die graphischen Fragezeichen in der Quelltextansicht von TB. - siehe Anhang

Ich kann mir vorstellen, dass nicht nur mein Mailprogramm Schwierigkeiten hat, die Kodierung selbstständig zu erkennen. Deshalb halte ich es für sinnvoll mod_form entprechend zu modifizieren - just in case.
Dateianhänge
screenshot.jpg
Günther Ludwig
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi,

ich glaube, dass laut RFC 2822 (nagelt mich nicht fest) ein Content-Type Charset im Mailheader empfohlen wird:

Content-­Type: text/plain; charset="iso­-8859-­1"

Ansonsten hängt es davon ab mit welchen Charset das Formular ausgefüllt wurde. Bei Tests hat man meistens einen identischen Charset, aber manche User benutzen halt andere.

Ich denke, es kann nicht schaden, etwas in der Art mitzuschicken.

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich stelle mir vor eine Wahlmöglichkeit einzubauen.

Also UTF8, ISO oder eben gar keine.
Denn dann sollte natürlich auch der Inhalt passend codiert sein.
Ciao Markus
ConPresso-Module

Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!

Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
Antworten