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

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

$to = 'AAAA <postmaster@xxx.xx>'; $subject = 'BBBB'; $message = "CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC"; $headers = 'From: DDD<postmaster@xxx.xx>' . "\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 

Он отлично работает без заголовка Content-type:. Как я могу создавать новые строки и использовать объявление Content-type?

Вам нужно использовать файл, потому что ваш content-typetext/html .

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

аналогичный вопрос здесь

Если вы отправляете HTML-адрес электронной почты, используйте <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 =%

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

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

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

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

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

Например:

 <a href="mailto:someone@example.com?subject=Hello%20again&body=HI%20%0AThis%20is%20a%20new%20line"/> 

Вот jsfiddle

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

  <BR /> 

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

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