Hello Robert,
> function sendMail($fromName, $fromAddr, $toAddr, $subj, $text) {
> /* Diese drei Werte koennen fuer Headerinjektionen benutzt
> * und werden daher extra behandelt.
> */
> $subj = str_replace(array("\n", "\r"), ' ', $subj);
> $fromName = str_replace(array("\n", "\r"), ' ', $fromName);
> $fromAddr = str_replace(array("\n", "\r"), '', $fromAddr);
>
> return mail($toAddr, $subj, $text,
> "From: \"$fromName\" <$fromAddr>");
> }
Die Problematik ist eine ganz andere. Das wurde hier auch die letzten Tage schon verstreut diskutiert, soweit ich das selber mitbekommen habe. (Bin da im Moment noch extrem eingeschränkt)
1. Es ist wesentlich, ob die eMail später auf einem Linux-Host durch ein "sendmail"-Script
oder auf einem Windows-Host durch eine "echte" SMTP-Verbindung versendet wird.
Andersherum würde entsprechendes gelten, habe ich aber selber noch nicht gesehen (also
sendmail-Script auf einem Windows-Host oder MTA direkt ansprechen auf einem Linux)
Das Sendmail-Script nimmt entsprechend seiner Entstehungsgeschichte die einfachen Zeilen-
Umbrüche (chr(10)) und baut sie selber zu chr(13).chr(10) um. Wenn man da nun bereits 0D 0A
reinstopfen würde, gäbe es doppelte Zeilenumbrüche, da sowohl 0D als auch 0A zu einer voll-
ständigen Sequenz ergänzt werden würde. Beim direkten Versand über Port 25 findet keine
Manipulation mehr statt.
Du müsstest also für eine vernünftige Funktion erst einmal entscheiden, WIE der Versand
stattfinden soll, also die Plattform bzw. Anbindung an den Mail-Transport-Agent festlegen.
2. Extraktion von Zeilenumbrüchen aus den Headerzeilen siehe Einwände der Anderen
Wenn welche drins sind, dann stimmt etwas nicht
3. Kodierung für die Headerzeilen festlegen.
In Headerzeilen dürfen nur 7-Bit-ASCII-Zeichen stehen. Also müssen diese kodiert werden.
Das geschieht in der Praxis in zwei Stufen. Content-Encoding und Content-Transfer-Encoding.
Das Content-Encoding ist für den Client später wichtig, da er sonst nicht wissen kann, in
welcher Kodierung der Inhalt eigentlich vorliegt (z.B. ISO 8859-X oder UTF-8)
Das transfer-Encoding ist für den Mailversand wichtig, da ja nur 7-Bit-ASCII versandt werden
darf in den Headern. Dafür wird dann der bereits kodierte Content nochmals kodiert.
üblich sind Quoted Printable (Q) und (seltener) Base64 (B).
Hierzu hatte Chris© ein paar Muster rausgesucht und mich dadurch eigentlich erst darauf
gebracht, dass ich hier selber auch noch Handlungsbedarf haben werde in meinen Scripten.
https://forum.selfhtml.org/?t=168235&m=1097616
Dass der übrige Inhalt ebenfalls diesen Kodierungsregeln unterliegt, versteht sich von
selbst, aber da wird es ja auch explizit als Header zum Abschnitt angegeben, sollte also
gar nicht vergessen werden können.
Wenn Du nun also eine gute Hüllfunktion schreiben willst, dann solltest Du diese Dinge berücksichtigen. Hinzu kämen dann natürlich noch die Aufgabenstellungen der unterschiedlichen
MIME-Mail-Typen... Da hast Du dann aber gelich eine neue Mail-Klasse als Aufgabe.
Liebe Grüße
Tom
Coming Back soon