Новые строки (\ r\n) не работают в теле письма

Я использую функцию PHP mail():

    $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);

Когда я получаю это письмо, оно выглядит так:

CCCC CCCC CCCC CCC CCC CCC CCCC

Я бы ожидал что-то вроде этого:

CCCC
CCCC CCCC CCC 
CCC 
CCC 
CCCC


Он прекрасно работает без HTTP-заголовка Content-Type. Как я могу создавать новые строки и по-прежнему использовать мою декларацию "Content-Type"?

Ответ 1

Вам нужно использовать <br> потому что ваш Content-Type - text/html.

Он работает без заголовка Content-Type потому что тогда ваша электронная почта будет интерпретироваться как обычный текст. Если вы действительно хотите использовать \n вы должны использовать Content-Type: text/plain но тогда вы потеряете любую разметку.

Также проверьте аналогичный вопрос здесь.

Ответ 2

Если вы отправляете электронное письмо в формате HTML, используйте <BR> (или <BR/>, или </BR>), как указано.
Если вы отправляете текстовое электронное письмо, используйте % 0D% 0A.
\r = % 0D (Ctrl + M = возврат каретки)
\n = % 0A (Ctrl + A = перевод строки)

Если у вас есть ссылка на электронную почту,
НАПРИМЕР

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

Тогда используйте % 250D% 250A

% 25 =%

Ответ 3

Вам нужно использовать <br> вместо \r\n. Для этого вы можете использовать встроенный вызов функции nl2br Таким образом, ваш код должен выглядеть следующим образом

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

Ответ 4

Если вы используете content-type: text/html, вам нужно поставить <br>, потому что ваше сообщение будет создано как файл html.

Но если вы измените свой content-type на text/plain вместо text/html, вы сможете использовать символы \r\n.

Ответ 5

Использование <BR> не всегда достаточно. MS Outlook 2007 проигнорирует это, если вы не сообщите, что он является самозакрывающимся тегом html, используя

 <BR />

Ответ 6

Вы можете добавить новый символ строки в текстовом/открытом виде с помощью символьного кода % 0A.

Например:

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

Вот jsfiddle

Ответ 7

Это сработало для меня.

$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']);

Ответ 8

' '   

в моем случае не хватало места, когда добавилось пустое пространство ' \r\n'

Ответ 9

Другая вещь, использующая "", есть разница между "\ r\n" и "\ r\n".

Ответ 10

"\n\r" создает 2 новые строки, в то время как "\n", "\ r" & "\ r\n" выдают одиночные строки, если в заголовке используется content-type: text/plain.

Осторожно: если вы делаете следующий php код:

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

в браузере Windows вы получаете следующее:

ab
cd
e
f

ab cd e f

и с content-type: text/plain вы получаете следующее в выводе электронной почты;

ab
cd
e
f

Ответ 11

для текстовой/простой текстовой почты в почтовой функции обязательно используйте константу PHP_EOL, вы можете комбинировать ее с
слишком для текста /HTML текста:

$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";