Новые строки (\ 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";