echo $begrüßung;
Ich habe mal versucht, dass nachzuvollziehen, was mit den Funtkionsargumenten bis zur Übergabe an den Mailer geschieht, konnte da aber nicht finden, ob die auf dem Wege bis zu dieser Stelle schon irgendwqo manipuliert wurden.
Ich nehme mal die Verion 1.96 aus dem CSV in der annotierten Version, da gibt es Zeilennummern.
fprintf(sendmail, "To: %s\n", to);
fprintf(sendmail, "Subject: %s\n", subject);
if (headers != NULL) {
fprintf(sendmail, "%s\n", headers);
}
fprintf(sendmail, "\n%s\n", message);
ret = pclose(sendmail);
> Und hier wird die Message einfach auf den geöffneten Kanal geschrieben.
Ja, das ist der Teil, der die Header und den Body zusammenbaut. Im Original zu finden ab Zeile 235. Das ist nicht RFC-konform (nur \n statt \r\n), muss aber offensichtlich so sein, weil sonst die Empfehlung aus dem Handbuch "If messages are not received, try using a LF (\n) only. Some poor quality Unix mail transfer agents ..." nicht funktionieren tät. Im Bugtracker fand ich eine Diskussion zu diesem Thema: [#15841](http://bugs.php.net/bug.php?id=15841). Interessanter Punkt in der Diskussion: Unter Unix wird kein SMTP gesprochen sondern mit dem Mailprogramm des Systems. Der sollte systemtypische Zeilenumbrüche entgegennehmen und sie dann beim SMTP-Prozess korrekt gemäß RFC umsetzen. Windows spricht jedoch direkt SMTP, da braucht es eigentlich korrekterweise die \r\n.
Für die beiden extra zu verwendenden Header-Teile to und subject gibt es übrigens eine Behandlung in den Zeilen 114 bis 152. Hier werden alle von [ctype](http://de2.php.net/manual/en/ref.ctype.php) als "cntrl"-Zeichen gewertete Zeichen in ein Leerzeichen umgeschrieben (mit der ab Zeile 124 erwähnten Ausnahme).
> Das würde bedeuten, dass sich PHP-Mail() bewusst falsch verhält, indem es Header und Body nur mit einem einfachen "\n" abschließt. Oder es bestehen einfach noch Missverständnisse darüber, an welcher Stelle die HTTP- und MIME-Spezifikation hergestellt werden muss.
Ja, sieht so aus.
echo "$verabschiedung $name";