无法使用PHP mail()发送HTML邮件

无法使用PHP mail()发送HTML邮件,php,html,email,Php,Html,Email,奇怪的事情发生在我身上。我正在尝试使用php邮件函数发送HTML邮件,但在这里运气不好。即使我按字面意思复制/粘贴一段代码,它也不起作用。我做错了什么?下面是我使用的一段代码: $message = "<html><body>"; $message .= "<table rules='all' style='border-color: #666;' cellpadding='10'>"; $message .=

奇怪的事情发生在我身上。我正在尝试使用php邮件函数发送HTML邮件,但在这里运气不好。即使我按字面意思复制/粘贴一段代码,它也不起作用。我做错了什么?下面是我使用的一段代码:

        $message = "<html><body>";
        $message .= "<table rules='all' style='border-color: #666;' cellpadding='10'>";
        $message .= "<tr style='background: #eee;'><td><strong>Name:</strong> </td></tr>";
        $message .= "<tr><td><strong>Email:</strong> </td></tr>";
        $message .= "</table>";
        $message .= "</body></html>";       

        $to = 'me@gmail.com';

        $subject = 'Website Change Reqest';

        $headers = "From: " . $email . "\r\n";
        $headers .= "Reply-To: ". $email . "\r\n";
        $headers .= "MIME-Version: 1.0\r\n";
        $headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";

        if (mail($to, $subject, $message, $headers)) {
          echo 'Your message has been sent.';
        } else {
          echo 'There was a problem sending the email.';
        }
这就是我的电子邮件的样子…:

Reply-To: me@gmail.com

MIME-Version: 1.0

Content-Type: text/html; charset=ISO-8859-1
Message-Id: <20110703234551.A9D6153DAB@apache10.hostbasket.com>
Date: Mon, 4 Jul 2011 01:45:51 +0200 (CEST)

<html><body><table rules="all" style="border-color: #666;" cellpadding="10"><tr style='background: #eee;'><td><strong>Name:</strong> </td></tr><tr><td><strong>Email:</strong> </td></tr><tr><td><strong>Type of Change:</strong> </td></tr><tr><td><strong>Urgency:</strong> </td></tr><tr><td><strong>URL To Change (main):</strong> </td></tr><tr><td><strong>NEW Content:</strong> </td></tr></table></body></html>

我做错了什么?

我们看不到变量$email的设置位置,但我猜在$email变量的末尾可能有一个额外的换行符。这将产生在From:头之后和回复to:之前插入两个换行符的效果,这表示消息主体的开始和头的完成

尝试:

在构建消息之前。因为在回复邮件头之后似乎还有一个额外的换行符,所以我的理由是在$email中有一个额外的换行符

更新

还可以尝试在运行代码的系统上将换行符更改为PHP的本机格式。这是通过用PHP\u EOL替换\r\n来完成的


我们看不到$email变量是在哪里设置的,但我猜在$email变量的末尾可能会有一个额外的换行符。这将产生在From:头之后和回复to:之前插入两个换行符的效果,这表示消息主体的开始和头的完成

尝试:

在构建消息之前。因为在回复邮件头之后似乎还有一个额外的换行符,所以我的理由是在$email中有一个额外的换行符

更新

还可以尝试在运行代码的系统上将换行符更改为PHP的本机格式。这是通过用PHP\u EOL替换\r\n来完成的


我建议您使用mailer类。它们使您可以使用smtp身份验证,因此每封邮件都可以通过。举几个例子:


我建议您使用mailer类。它们使您可以使用smtp身份验证,因此每封邮件都可以通过。举几个例子:


下面是一个有用的链接,可以用php发送html电子邮件


下面是一个有用的链接,可以用php发送html电子邮件


您使用的是哪种操作系统?Mac OS X 10.7和我的电子邮件客户端是Sparrow您使用的是哪种操作系统?Mac OS X 10.7和我的电子邮件客户端是Sparrow sendmail会在邮件头中添加额外的换行符来发送邮件吗?@Jarred Farrish是的,我相信邮件会将未经修改的邮件头块传递到sendmail,然后是邮件正文,sendmail会发送它们,前提是它们的格式正确。这就是邮件注入有问题的原因。链接不错。我一直认为sendmail在换行时非常敏感。额外的$email=trim$email不起作用。。。仍然收到与以前相同的un HTML邮件…sendmail会在邮件标题中添加额外的换行符吗?@Jarred Farrish是的,我相信邮件会将未经修改的标题块传递到sendmail,然后是邮件正文,sendmail会在假定格式正确的情况下发送这些邮件。这就是邮件注入有问题的原因。链接不错。我一直认为sendmail在换行时非常敏感。额外的$email=trim$email不起作用。。。仍然收到以前的相同的un HTML消息。。。
$email = trim($email);
    $headers = "From: " . $email . PHP_EOL;
    $headers .= "Reply-To: ". $email . PHP_EOL;
    $headers .= "MIME-Version: 1.0" . PHP_EOL;
    $headers .= "Content-Type: text/html; charset=ISO-8859-1" . PHP_EOL;