Mailcodierung bei mod_form 4.1d

Diskussion zum Formular-Modul für ConPresso 4
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

Mailcodierung bei mod_form 4.1d

Beitrag von Mr. Magpie »

Ich habe heute erstmals die Version 4.1d von mod_form eingesetzt. In dieser kann man ja die Codierung der verschickten E-Mails wählen.

Mir fiel auf, dass die Subject-Zeile nicht korrekt codiert wird, bspw. kommt Folgendes im Mail-Quelltext (auszugsweise) heraus, wenn ich iso-8859-1 als Codierung einsetze und die Betreffzeile

Code: Alles auswählen

Testsubject mit Umlauten und Sonderzeichen: äÄöÖüÜß?
lautet:

Code: Alles auswählen

Subject: =?ISO-8859-1?Q?Testsubject mit Umlauten und Sonderzeichen: äÄöÖüÜß??=
Es findet demnach gar keine Codierung der Umlaute und Sonderzeichn statt!
Korrekt wäre in etwa dies (Mail mit dem selbem Subject, mit Thunderbird an mich selbst gesandt):

Code: Alles auswählen

Subject: =?ISO-8859-1?Q?Testsubject_mit_Umlauten_und_Sonderzeiche?=
 =?ISO-8859-1?Q?n=3A_=E4=C4=F6=D6=FC=DC=DF=3F?=
oder auch folgender Code:

Code: Alles auswählen

Subject: Testsubject mit Umlauten =?ISO-8859-1?Q?=E4=FC=F6=20und=20Sonderzeichen?= =?ISO-8859-1?Q?=3A=20=E4=C4=F6=D6=FC=DC=DF=3F?=
In http://community.conpresso.de/viewtopic ... 6703#26703 hatte ich deshalb noch die Code-Zeile

Code: Alles auswählen

$betreff = preg_replace('~([\xA0-\xFF])~e', '"=" . strtoupper(dechex(ord("$1")))', $betreff); 
in meinem Anpassungsvorschlag drin. Aber auch diese ist noch suboptimal.

Ich schlage für mod_form 4.1d vor, in includes/actions.inc.php in den Zeilen 258 und 280 jeweils

Code: Alles auswählen

$betreff = '=?'.$encoding.'?Q?' . iconv ( iconv_get_encoding('internal_encoding') , $encoding , $betreff ) . '?=';
gegen

Code: Alles auswählen

$betreff = mb_encode_mimeheader($betreff, $encoding, "Q");
auszutauschen.

Ich hab's bei mir unter CPO 4.0.12, PHP 5.2.17 und PHP 5.4.21 getestet.
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 »

Ich bin mir nicht wirklich sicher, ob das so richtig ist.

Die Codierungseinstellung in den Formulareinstellungen gibt ja an, mit welcher Codierung das Mail gesendet werden soll und nicht in welcher der Server normalerweise arbeitet.

Laut PHP-Handbuch steht der zweite Parameter für
"specifies the name of the character set in which str is represented in"

Tatsächlich scheint das aber zu funktionieren...
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 »

Deine Lösung funktioniert für den Mail-Inhalt schon, aber nicht für die Betreff-Zeile. Mir wäre es ja sonst nicht aufgefallen, ne?
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 es bei manchen Mails bzw. Clients unschöne Umbrüche in Links gibt, habe ich noch den Nachrichtentext quoted-printable gemacht und versucht alle HTML-Sonderzeichen wieder in plain text zurückzuverwandeln.

Falls Du diese hier mal ausprobieren möchtest...

edit: 14:06 Uhr gerade nochmal eine neue Version hochgeladen, damit auch PHP<5.3 funktioniert...
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 »

Funktioniert einwandfrei. Getestet mit UTF-8- und ISO-8859-1-"Zwangscodierung"
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 »

Aber leideer funzt die Version für PHP<5.3 noch nicht richtig...
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 »

Bei mit funzt es unter PHP 5.2.17.

Was heißt denn, dein "es funzt nicht richtig"? Was geht nicht und wie äußert sich das?

EDIT: Das Einzige, was mir jetzt noch auffiel ist, dass unter PHP 5.2 mehr Zeilenumbrüche als nötig erzeugt 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 »

Die benutzte Funktion quoted_printable_encode gibt es eben erst seit PHP5.3 und die verwendete Ersatzfunktion erzeugt zu viele Zeilenschaltungen (\r\n statt nur \n)
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 »

Also das, was ich in meinem EDIT beschrieb...
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 »

Das mit den Zeilenumbrüchen hatte ich dann schnell im Griff, aber...

Quoted printable scheint bei Plain-Text Links in Outlook zu Problemen zu führen. Ist wohl eher für HTML-Mails sinnvoll.

Daher habe ich es wieder entsorgt und stattdessen format=flowed ergänzt. Jetzt sind auch in Outlook lange umgebrochene Links trotzdem als ein Link funktionsfähig.
Ohne format=flowed wurden sie beim Umbrechen in einen Link und eine Textzeile zerlegt.
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 »

Soeben erst getestet - funzt.

Aber für die Bestätigungs-Mail sollte auch noch format=flowed eingestellt und das quoted-printable entsorgt werden.

Die Zeilen 244/245

Code: Alles auswählen

			$nachricht = $template_datei;
            $contentType = 'Content-Type: text/plain;' . $newline . 'Content-Transfer-Encoding: quoted-printable' . $newline;
erscheinen mir überflüssig, oder täusche ich mich?

p.s.: In der X-Mailer-Zeile eliminiere ich noch das phpversion() - man muss es den Angreifern ja nicht noch einfacher machen, die verwendete PHP-Version heraus zu finden :-)
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 »

Ja, richtig. Habe ich jetzt ergänzt.

Und nein, die Zeilen sind nicht überflüssig. Sie sind der Default-Wert und werden nur bei der Wahl einer Codierung überschrieben, ansonsten geht das Mail wie in den früheren Versionen ohne spezielle Codierung raus.
Dateianhänge
actions.inc.zip
(4.1 KiB) 380-mal heruntergeladen
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo,

das Thema ist zwar schon etwas alt, aber ich habe gerade auch das Problem, dass in den verschickten Bestätigungsmails zu viele Leerzeilen sind.

Es hatte sich für mich so angehört, als hättet ihr das behoben, oder habe ich da was falsch verstanden? :roll:

Gruß,
dutch
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 »

Was bedeutet denn "zu viele Leerzeilen"?

Meinst Du damit dass nach jeder Zeile erst mal eine Leerzeile kommt?
Oder häufen die sich an irgendeiner Stelle?

Manche Mailprogramme sehen ein \r\n als eine neue Zeile, andere gleich als zwei.
Daher muss man mal prüfen, mit welchem Quelltext Dein Browser das Template abspeichert.
Das Modul selbst schreibt seine Zeilen standardmäßig nur mit einem \n, das kann man aber gleich am Anfang von actions.inc.php ändern. Allerdings hast Du ja nicht zuwenige sondern eben zuviel. Vermutlich. Je nachdem wo Du jetzt wieviele zuviel hast...

Die Mailcodierung betrifft die Umlaute. Hast du Probleme mit Umlauten?
Wenn nein, dann braucht Du auch die Codierung nicht.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

ich habe in der Tat nach jeder Zeile eine Leerzeile drin, allerdings nur im Inhalt der textarea. Die anderen Formularfeldinhalte, die ich in der E-Mail verschicken lasse (alles input-Felder), werden, so wie im template angelegt, normal in der Mail gezeigt. Nur die Zeilenumbrüche der textarea sind eben doppelt drin.


Gruß,
dutch
Antworten