2010-11-19 101 views
1

请帮助我,我使用PHP发送一个HTML格式的邮件消息的问题mail() 我认为问题在于标题。我已经包含了两个头只用单引号或双引号略有区别:邮件标题在PHP不工作

头1:

$headers = 'From: [email protected]\r\n Reply-To: [email protected]'; 
$headers .= '\r\nContent-Type: multipart/alternative; boundary="'.$random_hash.'"'; 

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

头2:

$headers = "From: [email protected]\r\nReply-To: [email protected]"; 
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"".$random_hash."\""; 

使用这一块,我得到一个完美的头,但现在我的邮件发送空的,空的附件。我不是从哪里来的,因为我没有附加任何东西给我的邮件。

请建议做什么

回答

5

如果使用单引号在你的PHP字符串逃过像\ r \字符ñ将停止工作。

我不确定如何在没有更多上下文的情况下帮助您的附件。

4

我不喜欢php邮件。我建议使用XpertMailer:http://www.xpertmailer.com/做一个出色的工作。

+0

+1不错的图书馆,还没有看过那个。看起来不错! – 2010-11-19 20:40:38

3
  • 使用library
  • 不要重新发明轮子,如果你不能让它轮。
  • 使用library
+3

我不能忍受这句话*不要重新发明轮子*,因为它需要假设轮子本质上是完美的(并且从什么时候开始任何框架/库的完美)......但是你是我的延伸认为把正确的点推回家... +1 – ircmaxell 2010-11-19 20:44:04

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."--"; 
0

如果你没有实际定义两个版本(明文/ HTML)与多边界,那么你应该改变的内容类型:多重/替代正确的内容类型为你的邮件内容。

此外,PHPMailer等等库通常优于PHP的原生mail()函数,因为它们提供了更大的灵活性,同时不需要您手动构建复杂的头文件。

+0

PHPMailer做到了...... thnks – Anubhav 2010-11-22 12:15:36