我正在尝试使用FPDF并将生成的文件附加到电子邮件中。我看过这篇文章Email PDF Attachment with PHP Using FPDF,并且在向我自己发送电子邮件并在Thunderbird中查看时,给出了答案。以下是给出的示例代码:
<?php
require('lib/fpdf/fpdf.php');
$pdf = new FPDF('P', 'pt', array(500,233));
$pdf->AddFont('Georgiai','','georgiai.php');
$pdf->AddPage();
$pdf->Image('lib/fpdf/image.jpg',0,0,500);
$pdf->SetFont('georgiai','',16);
$pdf->Cell(40,10,'Hello World!');
// email stuff (change data below)
$to = "myemail@example.com";
$from = "me@example.com";
$subject = "send email with pdf attachment";
$message = "<p>Please see the attachment.</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 = "test.pdf";
// encode data (puts attachment in proper format)
$pdfdoc = $pdf->Output("", "S");
$attachment = chunk_split(base64_encode($pdfdoc));
// main header
$headers = "From: ".$from.$eol;
$headers .= "MIME-Version: 1.0".$eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"".$separator."\"";
// no more headers after this, we start the body! //
$body = "--".$separator.$eol;
$body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
$body .= "This is a MIME encoded message.".$eol;
// message
$body .= "--".$separator.$eol;
$body .= "Content-Type: text/html; charset=\"iso-8859-1\"".$eol;
$body .= "Content-Transfer-Encoding: 8bit".$eol.$eol;
$body .= $message.$eol;
// attachment
$body .= "--".$separator.$eol;
$body .= "Content-Type: application/octet-stream; name=\"".$filename."\"".$eol;
$body .= "Content-Transfer-Encoding: base64".$eol;
$body .= "Content-Disposition: attachment".$eol.$eol;
$body .= $attachment.$eol;
$body .= "--".$separator."--";
// send message
mail($to, $subject, $body, $headers);
?>
但是,在outlook(2007)中发送和查看时,它会将消息创建为附件,这与代码或outlook /
有关吗?任何帮助表示感谢。
伊恩
答案 0 :(得分:0)
IMO没有意义让这是一个MIME编码的消息。作为一个部分的内容;通常这样的句子先于第一个mime分隔符,以通知任何用户没有MIME功能的邮件阅读器,以下行代表什么。本质上,你有一个带有两个文本部分的邮件,一个纯文本(这是一个MIME编码的邮件。)和一个html(请参阅附件。)中的一个 multipart / mixed 容器。如果它是 multipart / alternative ,那么邮件阅读器会选择其中一个进行显示,但这样一来,读者可能会怀疑要显示的内容。
因此,我建议缩短
$body = "--".$separator.$eol;
$body .= "Content-Transfer-Encoding: 7bit".$eol.$eol;
$body .= "This is a MIME encoded message.".$eol;
到
$body = "This is a MIME encoded message.".$eol.$eol;