新行(\ r \n)在电子邮件正文中不起作用

Ver*_*tus 51 php email content-type newline

我正在使用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);
Run Code Online (Sandbox Code Playgroud)

当我收到此电子邮件时,它看起来像这样:

CCCC CCCC CCCC CCC CCC CCC CCCC
Run Code Online (Sandbox Code Playgroud)

我希望这样的事情:

CCCC
CCCC CCCC CCC 
CCC 
CCC 
CCCC
Run Code Online (Sandbox Code Playgroud)

没有"Content-type:"标题,它工作正常.如何创建新行并使用我的内容类型声明?

小智 93

你需要使用a,<br>因为你Content-Typetext/html.

它没有Content-Type标题,因为那时你的电子邮件将被解释为纯文本.如果你真的想使用\n你应该使用Content-Type: text/plain但是你会失去任何标记.

类似的问题在这里

  • `<pre>`标签也能正常工作吗?创建电子邮件的文本和HTML版本,不仅仅用`<pre> </ pre>`标签包装文本最好/更少hacky比用'<br />`替换`\n`? (3认同)

小智 23

如果您要发送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>
Run Code Online (Sandbox Code Playgroud)

然后使用%250D%250A

%25 =%


San*_*oob 7

你需要使用<br>而不是\r\n.为此你可以使用内置函数调用nl2br 所以你的代码应该是这样的

 $message = nl2br("CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC");
Run Code Online (Sandbox Code Playgroud)


小智 5

如果你使用content-type: text/html你需要放一个,<br>因为你的消息会像一个html 文件一样受到威胁。

但是如果你改变你的content-typetotext/plain而不是text/html你将能够使用\r\n字符。


小智 5

使用 <BR> 并不总是足够的。如果您不使用以下命令告诉 Outlook 这是一个自闭合 html 标记,MS Outlook 2007 将忽略此标记

 <BR />
Run Code Online (Sandbox Code Playgroud)