Hi!
Wenn ich aber schon CR/LF übergebe, liegt es an der Intelligenz von sendmail, ob es den Zeilenumbruch zuerst untersucht und nur dann ein CR ergänzt, wenn noch keins da ist, oder stur alle LF durch CR/LF ersetzt, so dass doppelte CRs entstehen können, oder gar alle CR *UND* alle LF durch CR/LF ersetzt. Oder, wie dedlfix andeutet, PHP übersetzt zwischendrin auch schon ...
Nee, PHP übersetzt nicht, es verwendet einfach LF für seine Zeilenumbrüche und lässt die vom Nutzer angegebenen (für die zusätzlichen Header) so wie sie sind. (Es sei denn, die sind in Subject und To, da werden sie mittlerweile in Leerzeichen (wenn ich mich recht erinnere) übersetzt.)
Ich weiß bis heute nicht genau, ob die Zeilenumbrüche an den Schnittstellen
PHP-Script -> PHP-Interpreter -> sendmail
wirklich exakt spezifiziert sind oder nicht.
Genau zu diesen Zeilenumbrüchen gibt es mindestens eine Diskussion im PHP-Bug-Tracker. Ich vermische da mal meine Erinnerungen an die dortige Diskussion mit meinem Verständnis der Sachlage: Ein MTA muss notwendige Anpassungen zwischen den im System üblichen Zeilenumbrüchen und SMTP vornehmen. Es kann ja auch sein, dass gar kein SMTP im Spiel ist und der MTA das auf anderem Weg zum Empfänger befördert. Das Programm, das eine Nachricht an den MTA übergibt, kann das nicht wissen und sollte sich deshalb an die Gepflogenheiten des Systems halten. Genau das haben einige MTAs getan und haben CRLFs in CRCRLFs konvertiert, weil sie systemspezifisch nur LFs erwarteten. Aus dieser Bugmeldung resultierte dann auch die Empfehlung im Handbuch, im Problemfall nur LFs zu verwenden und vermutlich auch die interne Verwendung von nur LFs. Aufgrund der nicht beeinflussbaren internen LFs kann man wie gesagt getrost auch stets nur LFs verwenden, der MTA hat ja sowieso welche zu konvertieren.
Lo!