php mail()函数更改字符并删除返回中断

时间:2012-07-03 04:00:33

标签: php email

这就是我所拥有的:

$msg = "1'2 ’3"4 “5”6 7~8!9@10#11$12%13^14&15*16(17)18}19{20"21:22?23>24<25 ";
mail("myemail@example.com","My subject",$msg);

当我收到电子邮件时,我得到了这个:

1&#039;2 ’3&quot;4 “5”6 7~8!9@10#11$12%13^14&amp;15*16(17)18}19{20&quot;21:22?23&gt;24&lt;25

所以它将字符更改为html我猜?有任何想法吗? 我需要收到的电子邮件包含我在$ msg.thank中存储的确切内容

它还删除了我的退货休息时间。在db中,字段有返回中断,它存储如下:

Hello $name

welcome to $websitename 

thank you, management

这是一个蹩脚的例子,但你可以看到有2个空行。当电子邮件被发送出去时,这些回复中断将被忽略,并且它的全部符合任何想法

2 个答案:

答案 0 :(得分:4)

尝试添加标题,例如:

$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($to, $subject, $message, $headers);

见这里:PHP mail()

答案 1 :(得分:2)

您必须将邮件封装在base64编码格式中,以防止内容错位:

$msg = "1'2 ’3\"4 “5”6 7~8!9@10#11$12%13^14&15*16(17)18}19{20\"21:22?23>24<25";

$body = chunk_split(base64_encode($msg));

mail("myemail@example.com", "My subject", $body, "Content-Transfer-Encoding: base64");

处理换行的方式因邮件客户端而异;例如,已知Outlook可以压缩新行,但也提供了恢复它们的方法。

为了完全控制,您应该选择HTML电子邮件,可选择使用文本模式后备。