71

我正在使用 PHPmail()函数:

    $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-TypeHTTP 标头它工作正常。如何制作新行并仍然使用我的“Content-Type”声明?

4

13 回答 13

127

您需要使用 a<br>因为您的Content-Typeis text/html

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

也在这里查看类似的问题。

于 2013-04-17T14:55:01.670 回答
35

如果您要发送 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 = %

于 2014-08-25T19:36:25.073 回答
9

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

 $message = nl2br("CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC");
于 2014-03-17T05:10:08.173 回答
5

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

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

于 2015-03-14T14:26:15.380 回答
4

使用 <BR> 总是不够的。如果您不告诉 Outlook 它是一个自闭合 html 标记,则 MS Outlook 2007 将忽略这一点

 <BR />
于 2015-04-29T10:06:06.013 回答
3

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

例如:

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

这是jsfiddle

于 2017-06-01T14:40:41.313 回答
1

这对我有用。

$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']);
于 2017-03-10T11:47:18.577 回答
0

Another thing use "", there is a difference between "\r\n" and '\r\n'.

于 2018-04-08T22:13:35.783 回答
0
$mail = new PHPMailer;
$mail->isSMTP(); 
$mail->isHTML(true);

在处理所有 html 标记后插入此代码

<br> <p> in $mail->Body='Hello<br> how are you ?<b>';
于 2021-02-20T06:18:24.317 回答
0

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

我的个人用例:使用 mailx 邮件程序,只需将“\r\n”替换为“\n”即可解决我的问题,这与错误的自动 Content-Type 设置有关。

错误的标题:

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”总是错误的/不需要的,但在我的情况下它们在哪里。

于 2020-03-18T16:42:07.090 回答
0
' '   

在我的情况下缺少空间,当添加的空格' \r\n'开始工作时

于 2018-03-18T15:46:38.230 回答
0

对于邮件函数中的文本/纯文本邮件,肯定使用 PHP_EOL 常量,您也可以将它与
text/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";
于 2019-06-16T21:52:25.863 回答
0

如果在标题中使用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
于 2019-02-26T18:15:56.263 回答