我正在使用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标头,它工作正常。如何制作新行并仍然使用我的“内容类型”声明?
答案 0 :(得分:80)
您需要使用<br>
,因为Content-Type
为text/html
。
它没有Content-Type
标题,因为那时您的电子邮件将被解释为纯文本。如果你真的想使用\n
,你应该使用Content-Type: text/plain
但是你会丢失任何标记。
另请查看类似问题here。
答案 1 :(得分:19)
如果您要发送HTML电子邮件,请按照说明使用&lt; BR&gt; (或&lt; BR /&gt; )。
如果您要发送纯文本电子邮件,请使用%0D%0A
\ r = %0D (Ctrl + M =回车)
\ n = %0A (Ctrl + A =换行符)
如果您的电子邮件中有电子邮件链接,则
EG
<A HREF="mailto?To=...&Body=Line 1%250D%250ALine 2">Send email</A>
然后使用%250D%250A
%25 =%
答案 2 :(得分:6)
您需要使用<br>
代替\r\n
。为此,您可以使用内置函数调用nl2br
所以你的代码应该是这样的
$message = nl2br("CCCC\r\nCCCC CCCC \r CCC \n CCC \r\n CCC \n\r CCCC");
答案 3 :(得分:4)
如果您使用content-type: text/html
,则需要设置<br>
,因为您的邮件会像 html文件一样受到威胁。
但如果您将content-type
更改为text/plain
而不是text/html
,则可以使用\r\n
个字符。
答案 4 :(得分:1)
使用
<BR>
是不够的。如果你不通过使用
<BR />
答案 5 :(得分:1)
您可以使用%0A 字符代码在text / plain内容类型中添加换行符。
例如:
<a href="mailto:someone@example.com?subject=Hello%20again&body=HI%20%0AThis%20is%20a%20new%20line"/>
以下是jsfiddle
答案 6 :(得分:0)
这对我有用。
$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']);
答案 7 :(得分:0)
' '
当我添加' \r\n'
的空格开始工作时,我的情况下缺少空格
答案 8 :(得分:0)
另一件事使用&#34;&#34;,&#34; \ r \ n&#34;之间存在差异。和&#39; \ r \ n&#39;。
答案 9 :(得分:0)
如果在标题中使用content-type: text/plain
,则\ n \ r产生2行,而\ n,\ 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
答案 10 :(得分:0)
对于邮件功能中的文本/纯文本邮件,绝对使用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";
答案 11 :(得分: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”总是错误/不需要的,但是在我看来,它们在哪里。
答案 12 :(得分:0)
$mail = new PHPMailer;
$mail->isSMTP();
$mail->isHTML(true);
工作后插入此代码 所有 html 标签如
<br> <p> in $mail->Body='Hello<br> how are you ?<b>';