Doppelte Zeilenumbrüche mit mail()

Hi,

Ich habe eine php-Seite, die Mails verschickt. Die Funktion mail() erhält als Parameter für den Inhalt der Mail „$_POST[content]“, wobei content eine Textarea ist.
Allerdings sind in den Mails, die dann verschickt werden, alle Zeilenumbrüche doppelt bzw. die Funktion hängt ans Ende jeder Zeile (auch der letzten) einen weiteren Zeilenumbruch an.
Kann man das irgendwie verhindern?

Danke

–WhiteAvenger

textareas liefern ein CRLF .
mail reicht aber ein LF den bei CRLF fängt es an selber zu manipulieren.

probier
$var = preg_replace(’/\r\n|\r/’, „\n“, $text);

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

zur erklärung

textareas liefern ein CRLF .

Carriage Return (\r) (=„Wagenrücklauf“)
Line Feed (\n) (=„Zeilenvorschub“)

Windows verwended ein \r\n zum Zeilenumbruch, während Linux nur \n braucht…

Das ganze kann aber auch zu Problemen führen, wenn der Webserver eben kein Linux Apache ist, sondern vielleicht Windowshäutig (IIS?)
Bin mir nicht sicher, ob DER dann nicht wieder beides bräuchte um richtig zu funktionieren…

Grüße
Munich

textareas liefern ein CRLF .

Carriage Return (\r) (=„Wagenrücklauf“)
Line Feed (\n) (=„Zeilenvorschub“)

Windows verwended ein \r\n zum Zeilenumbruch, während Linux
nur \n braucht…

ja und nein . :smile:

Es liegt an der Installation der komponenten, es gibt auch linux installationen wo sowas nicht passiert, das betriebsystem ist also nicht das eigentliche problem.

siehe http://www.php.net/manual/en/function.mail.php

Note: If messages are not received, try using a LF (\n) only. 
Some poor quality Unix mail transfer agents replace LF by CRLF
 automatically (which leads to doubling CR if CRLF is used). 
This should be a last resort, 
as it does not comply with » RFC 2822

Das ganze kann aber auch zu Problemen führen, wenn der
Webserver eben kein Linux Apache ist, sondern vielleicht
Windowshäutig (IIS?)
Bin mir nicht sicher, ob DER dann nicht wieder beides bräuchte
um richtig zu funktionieren…

nein, den es wird wenn was hinzugefügt.

Ergo würde immer \r\n ausreichen. Nur einige übertragungen an den SMTP ersetzen \r mit \r\n weil eine EMAIL laut RFC

uszug aus der RFC2822:

 Zitat:Messages are divided into lines of characters. A line is a series of
 characters that is delimited with the two characters carriage-return
 and line-feed; that is, the carriage return (CR) character (ASCII
 value 13) followed immediately by the line feed (LF) character (ASCII
 value 10).

mit \r\n enden muss pro zeile. Somit ergibt sich ein \r\n\ zu \r\r\n .

Grüße
Munich

Ergo würde immer \r\n ausreichen. Nur einige übertragungen an
den SMTP ersetzen \r mit \r\n weil eine EMAIL laut RFC

uszug aus der RFC2822:
mit \r\n enden muss pro zeile. Somit ergibt sich ein \r\n\ zu
\r\r\n .

Heißt das, der angegebene Code funktioniert nicht?

Das wäre ein Error .
Nur bei email-header wäre das ein problem und es würde im schlimsten fall ein leere email gesendet, beim body ist es ausser doppelte leerzeichen kein problem.
Somit kann man nicht von einem Error (funktioniert nicht) sprechen.

funktioniert also allerdings wird Auf einigen servern doppelte leerzeilen produzier, wie du bemerkt hast.
Das kann man bei Windows Servern ausschliessen.
Bei Linux servern sollte man darauf achten welchen man nimmt. Suse Linux ist da nicht die beste wahl.

Doppelte leerzeichen sind meines errachtens kein Error.
Sondern ein schönheitsfehler um den sich der Programmierer kümmern sollte.
Speicherpfade passt man ja auch an :smile:
z.b.
windows c:\ordner
linux /ordner

so programmieren das es in jedem fall funktioniert , das ist die aufgabe des programmierers :smile:

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Entschuldigung, das war missverständlich formuliert.

Heißt das, der angegebene Code funktioniert nicht?

Ich meinte folgenden Code:

$var = preg_replace(’/\r\n|\r/’, „\n“, $text);

Funktioniert der jetzt oder nicht?

ja eigentlich schon . Eben nur einige versionen von Linux schnallen nicht das \r\n schon vorhanden ist und ersetzen es zu \r\r\n .
Windows hingegen ersetzt auch die \n , aber macht eben garnichts bei \r\n , wie auch viele andere linux das merken und die finger von lassen.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]