php中的邮件头不起作用

时间:2010-11-19 20:31:37

标签: php sendmail email-headers

请帮助我,我在使用php mail()发送带有html格式的邮件时遇到问题 我认为问题在于标题。我已经包含了两个标题,只有单引号或双引号:

标题1:

$headers = 'From: webmaster@example.com\r\n Reply-To: webmaster@example.com';
$headers .= '\r\nContent-Type: multipart/alternative; boundary="'.$random_hash.'"'; 

当我使用上面的单引号时,我的所有html代码都在邮件中打印为简单文本而没有正确的html格式。此外,我的标题显示在\r\n缺失后所有内容都搞砸了。

标题2:

$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"".$random_hash."\"";

使用这个,我得到一个完美的标题,但现在我的邮件被发送为空的附件。我没有来自哪里,因为我没有附上任何东西到我的邮件。

请建议做什么

5 个答案:

答案 0 :(得分:5)

如果在PHP字符串上使用单引号,\ r \ n之类的转义字符将停止工作。

我不确定如何在没有更多背景的情况下帮助您的依恋。

答案 1 :(得分:4)

我不喜欢php邮件。我建议使用XpertMailer:http://www.xpertmailer.com/做得很好。

答案 2 :(得分:3)

  • 使用library
  • 如果你不能转动轮子,不要重新发明轮子。
  • 使用library

答案 3 :(得分:0)

这是我在切换到phpmailer之前使用的。如上所述使用库。

// Make email headers
$separator = '--==Multipart_Boundary_'.md5(time());
$eol = PHP_EOL;

$filepath = "filename.pdf";
// open pdf file
$handle = fopen($filepath, "r");
// read pdf file
$f_contents=fread($handle,filesize($filepath));
// encode read pdf file
$attachment = chunk_split(base64_encode($f_contents));
// close pdf file
fclose($handle);
$message = "Text goes here";

// main header (multipart mandatory)
$headers = "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol;
$headers .= "Content-Transfer-Encoding: 7bit".$eol;
$headers .= "X-Priority: 1 (Highest)".$eol;
$headers .= "X-MSMail-Priority: High".$eol;
$headers .= "Importance: High".$eol;

// message
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: text/plain; charset=utf-8".$eol;
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$headers .= $message.$eol;

// attachment
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: application/pdf; name=".$filename.$eol;
$headers .= "Content-Transfer-Encoding: base64".$eol;
$headers .= "Content-Disposition: attachment; filename=".$filename.$eol.$eol;
$headers .= $attachment.$eol.$eol;
$headers .= "--".$separator."--";

答案 4 :(得分:0)

如果您实际上没有定义具有多部分边界的两个版本(纯文本/ HTML),那么您应该将内容类型:multipart / alternative更改为邮件正文的正确内容类型。

此外,像PHPMailer等文库通常比PHP的本地mail()函数更受欢迎,因为它们提供了更大的灵活性,同时不需要您手动构建复杂的标题。