web-dev-qa-db-de.com

neue Zeilen (\ r\n) funktionieren nicht im E-Mail-Text

Ich verwende die PHP mail () - Funktion:

    $to      = 'AAAA <[email protected]>';
    $subject = 'BBBB';
    $message = "CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC";
    $headers = 'From: DDD<[email protected]>' . "\r\n";
    $headers .= "Content-type: text/html; charset=\"UTF-8\"; format=flowed \r\n";
    $headers .= "Mime-Version: 1.0 \r\n"; 
    $headers .= "Content-Transfer-Encoding: quoted-printable \r\n";
    mail($to, $subject, $message, $headers);

Wenn ich diese E-Mail erhalte, sieht das so aus:

CCCC CCCC CCCC CCC CCC CCC CCCC

Ich würde so etwas erwarten:

CCCC
CCCC CCCC CCC 
CCC 
CCC 
CCCC

Es funktioniert auch ohne "Content-type:" - Header. Wie kann ich neue Zeilen erstellen und meine Inhaltsartdeklaration verwenden?

39
Verbatus

Sie müssen einen <br> verwenden, da Ihr content-typetext/html ist.

es funktioniert ohne den content-type-Header, da Ihre E-Mail dann als Text interpretiert wird. Wenn Sie wirklich \n verwenden möchten, sollten Sie content-type: text/plain verwenden.

ähnliche Frage hier

75
errieman

Wenn Sie HTML-E-Mails senden, verwenden Sie <BR> (oder <BR /> ) wie angegeben.
Wenn Sie eine Nur-Text-E-Mail senden, verwenden Sie% 0D% 0A
\r =% 0D (Strg + M = Wagenrücklauf)
\n =% 0A (Strg + A = Zeilenvorschub)

Wenn Sie einen E-Mail-Link in Ihrer E-Mail haben,
Z.B 

<A HREF="mailto?To=...&Body=Line 1%250D%250ALine 2">Send email</A>

Verwenden Sie dann% 250D% 250A

% 25 =%

19
Mark A.

Sie müssen <br> anstelle von \r\n verwenden. Dafür können Sie den eingebauten Funktionsaufruf nl2br .__ verwenden. Ihr Code sollte also so sein

 $message = nl2br("CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC");
6
Sanoob

Wenn Sie content-type: text/html verwenden, müssen Sie einen <br> eingeben, da Ihre Nachricht wie eine html-Datei bedroht wird.

Wenn Sie jedoch content-type anstelle von text/plain in text/html ändern, können Sie \r\n-Zeichen verwenden.

4
Nut_Shot

Die Verwendung von <BR>ist nicht immer ausreichend. MS Outlook 2007 ignoriert dies, wenn Sie Outlook nicht mitteilen, dass es sich um ein selbstschließendes HTML-Tag handelt

 <BR />
1
Windkin

Mit dem Zeichencode % 0A können Sie ein neues Zeilenzeichen im Text/Plain-Inhaltstyp hinzufügen.

Zum Beispiel: 

<a href="mailto:[email protected]?subject=Hello%20again&body=HI%20%0AThis%20is%20a%20new%20line"/>

Hier ist die jsfiddle

1
John

verwenden Sie für Text-/Nur-Text-Mail in einer Mail-Funktion auf jeden Fall die PHP_EOL-Konstante, mit der Sie sie kombinieren können
auch für Text/HTML-Text:

$messagePLAINTEXT="This is my message."
. PHP_EOL .
"This is a new line in plain text";

$messageHTML="This is my message."
. PHP_EOL . "<br/>" .
"This is a new line in html text, check line break in code view";

$messageHTML="This is my message."
. "<br/>" .
"This is a new line in html text, no line break in code view";
0
DrOne

Eine andere Sache benutzt "", es gibt einen Unterschied zwischen "\ r\n" und '\ r\n'. 

0
Mike Q
' '   

in meinem Fall fehlte Platz, als ' \r\n' ein Leerzeichen hinzugefügt wurde

0
Arun Prasad E S

"\ n\r" erzeugt 2 neue Zeilen, während "\ n", "\ r" & "\ r\n" einzelne Zeilen erzeugen, wenn Sie im Header content-type: text/plain verwenden.

Achtung: Wenn Sie den folgenden PHP-Code eingeben:

    $message='ab<br>cd<br>e<br>f';
print $message.'<br><br>';
    $message=str_replace('<br>',"\r\n",$message);
print $message;

sie erhalten im Windows-Browser Folgendes:

ab
cd
e
f

ab cd e f

und mit content-type: text/plain erhalten Sie in einer E-Mail-Ausgabe Folgendes:

ab
cd
e
f
0
walter1957

Das hat bei mir funktioniert.

$message  = nl2br("
===============================\r\n
www.domain.com \r\n
===============================\r\n
From: ".$from."\r\n
To: ".$to."\r\n
Subject: ".$subject."\r\n
Message: ".$_POST['form-message']);
0