使用 php 发送邮件:Header 被破坏

Sending mail with php: Header gets broken

我使用以下代码发送邮件:

$recipient="mymail@example.com";
$body="<html><body>This is magic</body></html>";
$subject="hi folks!";
$thisMail="sender@example.com";
$replyHeader = "MIME-Version: 1.0\r\nContent-Type: text/html; charset=UTF-8\r\nFrom: ".$thisMail. "\r\nReply-To: ".$thisMail."\r\n";
mail($sender, "Re:".$subject, $body, $replyHeader); 

邮件已发送,但当我在客户端邮件程序中打开它时,header 似乎已损坏。第一个换行符 (\r\n) 之后的所有内容都会显示在邮件中。还会显示其他一些 header-contents。所以邮件的可见body在邮件客户端中看起来是这样的:

Content-Type: text/html; charset=UTF-8
From: sender@example.com
Reply-To: sender@example.com
Envelope-To: mymail@example.com
X-UI-Filterresults [... lots of stuff]

<html><body>This is magic</body></html>

那里出了什么问题?

一个(在许多例子中)表明它 "should" 是这样工作的:http://css-tricks.com/sending-nice-html-email-with-php/

不是依赖 mail 函数,而是有一些非常棒的库可以为您处理 headers、附件、内容和发送。

Laravel 和其他框架使用的其中一个是 SwiftMailer,您应该检查一下。

他们也有一些不错的 documentation on setting headers

老实说,利用库而不是重新发明轮子,你会收获很多。