2011-07-04 65 views
1

奇怪的事情发生在我身上。我试图发送一个HTML邮件,使用php mail()函数,但在这里没有运气。即使我从字面上复制/粘贴一段代码,它也不起作用。我究竟做错了什么?下面是一段代码我使用:使用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 = '[email protected]'; 

     $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: [email protected] 

MIME-Version: 1.0 

Content-Type: text/html; charset=ISO-8859-1 
Message-Id: <[email protected]> 
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> 

我该怎么办错了吗?

+0

哪种操作系统,你用? –

+0

Mac OS X 10.7和我的电子邮件客户端是Sparrow – Michiel

回答

9

我们看不到变量$email的设置,但我猜测$email变量的末尾可能会有额外的换行符。这将在From:标题之后和Reply-to:之前放置两个换行符,这表示消息正文的开始和标题的完成。

尝试:

$email = trim($email); 

构造消息之前。由于在Reply-to标题之后似乎还有额外的换行符,因此我的情况在$email的额外中断更强。

UPDATE

也可以尝试更改换行到PHP的本机格式的系统中的代码将运行。这是通过更换\r\nPHP_EOL

$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; 
+0

sendmail是否会将该邮件与头文件中的额外换行符一起发送? –

+1

@Jarred Farrish是的,我相信'mail()'将未经修改的头部块传递给sendmail,随后是邮件正文,sendmail发送它们,假设它们的格式正确。这就是邮件注入有问题的原因。 http://www.phpsecure.info/v2/article/MailHeadersInject.en.php –

+0

尼斯链接。我始终认为sendmail对于linebreaks是非常敏感的。 –