FPDF生成的电子邮件附件由奇怪的字符组成

时间:2012-02-08 14:42:14

标签: php email fpdf email-attachments

过去两年我一直在使用FPDF来生成PDF文件。生成此文件后,它会通过电子邮件发送给我。我最近在新服务器上安装了完全相同的脚本。出于一个或其他原因,PDF的生成起作用,因为我没有收到错误消息。我在电子邮件中收到的消息是直文,如下所示:

- 4aca5942d8bd7e7d523d8b2d71c6b1ea-- 要么 --d7582bf6769dd1fa2ee8f05cb04cf445 -

每条信息都不同。

剥离的代码是:

require('class.phpmailer.php');
require('fpdf.php');
define('FPDF_FONTPATH','font/');

//Create new PDF
$pdf=new PDF();
$pdf->AliasNbPages(); 
$pdf->company = $business;

$pdf->SetFont('Arial','',12);
$pdf->SetAutoPageBreak(false);
$pdf->AddPage('P');

// email stuff
$tijd = time();
$datum = date('j-m-Y', $tijd);
$bestandsnaam = $usernameinlog."-".$datum;
$from = "magazijnbeheer@".$website;
$subject = "Voorraad mutatie door ".$usernameinlog; 
$message = "<p>Zie bijlage voor een mutatieoverzicht.</p>";

// a random hash will be necessary to send mixed content
$separator = md5(time());

// carriage return type (we use a PHP end of line constant)
$eol = PHP_EOL;

// attachment name
$filename = $bestandsnaam.".pdf";

// encode data (puts attachment in proper format)
$pdfdoc = $pdf->Output("", "S");
$attachment = chunk_split(base64_encode($pdfdoc));

// main header (multipart mandatory)
$headers  = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol; 
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"".$eol.$eol; 
$headers .= "Content-Transfer-Encoding: 7bit".$eol;
$headers .= "This is a MIME encoded message.".$eol.$eol;


// The actual message
$headers .= "--".$separator.$eol;
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$headers .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$headers .= $message.$eol.$eol;

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


mail($emailemployee, $subject, "", $headers);

有谁知道出了什么问题,我错过了php.ini中的参数吗? 再一次:这个相同的代码在不同的服务器上工作,所以我觉得有些设置错了,或者我忘了安装一些东西。

:-)谢谢,

亚历

2 个答案:

答案 0 :(得分:0)

如果您的服务器没有运行Windows,

$eol = PHP_EOL;可能会导致问题。

电子邮件中的每一行必须以CRLF结尾,无论操作系统如何,因此您应该硬编码$eol = "\r\n";

有时,服务器和客户端将处理CR或LF,但它不是标准的,他们真的不需要。


如果此后仍有问题,请将消息源添加到问题中(为简洁起见,可能会将base64位调整为2行)?

答案 1 :(得分:0)

mail($emailemployee, $subject, "", $headers);

你基本上发送一条空信息,整个内容以某种方式填入 $头....

尝试将$headers .= "Content-Transfer-Encoding: 7bit".$eol;下的所有内容放在$ body变量而不是$ headers中,然后使用

发送
mail($emailemployee, $subject, $body, $headers);

(也按照SimonMayer建议的$eol = PHP_EOL替换$eol = "\r\n"