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

我正在使用 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 HTTP 头工作的很好。我怎样才能使 新台词仍然使用我的“内容类型”声明?

205368 次浏览

您需要使用 <br>,因为您的 Content-Typetext/html

它在没有 Content-Type头的情况下工作,因为那样的话您的电子邮件将被解释为 纯文本。如果你真的想使用 \n,你应该使用 Content-Type: text/plain,但是你会失去任何标记。

也可以查看类似的问题 给你

您需要使用 <br>而不是 \r\n。为此,可以使用内置函数调用 < a href = “ http://us.php.net/nl2br”rel = “ noReferrer”> nl2br 所以你的代码应该是这样的

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

如果您发送 HTML 电子邮件,然后使用 < BR > (或 < 商业登记册/> ,或
) ,如上所述。
如果您发送的是纯文本电子邮件,请使用 < strong >% 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 =%

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

但是,如果您将 content-type改为 text/plain而不是 text/html,您将能够使用 \r\n字符。

吸毒 <BR> 并不总是足够的。MSOutlook2007将忽略这一点,如果你不告诉 Outlook 这是一个自动关闭的 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']);

可以使用 % 0A字符代码在文本/纯内容类型中添加新的行字符。

例如:

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

这是 Jsfiddle

' '

在我的例子中,当一个添加了 ' \r\n'的空白空间开始工作时,缺少了空间

还有一件事用“ r n”和“ r n”是有区别的。

如果在 Header 中使用 content-type: text/plain,则“ n”、“ r”& “ r n”生成2个新行,而“ n”、“ r”& “ r n”生成单个行。

注意: 如果执行下面的 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

对于 mail 函数中的文本/纯文本邮件,一定要使用 PHP _ EOL 常量,对于 text/html 文本,也可以将其与 < br/> 结合使用:

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

OP 的问题与 HTML 编码有关。但是如果您使用纯文本,请使用“ n”而不是“ r n”。

我的个人用例: 使用 mailx 邮件,简单地将“ r n”替换成“ n”修复了我的问题,与错误的自动内容类型设置有关。

错误的标题:

User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: base64

正确的标题:

User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

我并不是说“ application/octet-stream”和“ base64”总是错误的/不需要的,但是它们在我的情况下。

$mail = new PHPMailer;
$mail->isSMTP();
$mail->isHTML(true);

工作后插入此代码 所有的 html 标签

<br> <p> in $mail->Body='Hello<br> how are you ?<b>';