PHP邮箱->PDF到电子邮件提供空白PDF作为附件


PHP Mailer -> PDF to Email provides blank PDF as attachment

我使用PHP Mailer基本上发送一个交互式PDF到电子邮件地址。这可以在本地从PDF调用脚本到服务器,但是当PDF在服务器上完成时不起作用。

代码如下:

<?php
if(!isset($HTTP_RAW_POST_DATA)) {
    echo "The Application could not be sent. Please save the PDF and email it manually.";
    exit;
}
echo "<html><head></head><body><img src='loading.gif'>";
//Create PDF file with data
$semi_rand = md5(time());
$pdf = $HTTP_RAW_POST_DATA;
 $file = $semi_rand . ".pdf"; 
 $handle = fopen($file, 'w+');
 fwrite($handle, $pdf);   
 fclose($handle);
//
require_once('class/class.phpmailer.php');
include("class/class.smtp.php"); // optional, gets called from within class.phpmailer.php if not already loaded
$mail = new PHPMailer(false); // the true param means it will throw exceptions on errors, which we need to catch
$mail -> CharSet = "UTF-8";
$mail->IsSMTP(); // telling the class to use SMTP
try {
  $mail->Host       = "HOST"; // SMTP server
  $mail->SMTPDebug  = 2;                     // enables SMTP debug information (for testing)
  $mail->SMTPAuth   = true;                  // enable SMTP authentication
  $mail->SMTPSecure = "ssl";                 // sets the prefix to the servier
  $mail->Host       = "HOST";
  $mail->Port       = 465;
  $mail->Username   = "USERNAME";
  $mail->Password   = "PASSWORD";
  $mail->AddAddress('TO ADDRESS');
  $mail->SetFrom('FROM ADDRESS');
  $mail->Subject = 'SUBJECT';
  $mail->Body = 'Please see attachment';
  $mail->IsHTML(true);
  $mail->AddAttachment($file); // attachment
  $mail->Send();
  //Delete the temp pdf file then redirect to the success page
  // unlink($file);
  echo '<META HTTP-EQUIV="Refresh" Content="0; URL="1.1.1.1">';    
  exit;    
} catch (phpmailerException $e) {
  //you can either report the errors here or redirect them to an error page
  //using the above META tag
  echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
  echo $e->getMessage(); //Boring error messages from anything else!
}
  //Verify the temporary pdf file got deleted
  unlink($file);
?>

我错过了什么吗?$mail的所有值(主机,用户名,密码等)都是正确的-但是当它创建要发送的PDF时,它只通过<1 kb。我的PDF在提交时调用这个PHP文件

您不能使用fwrite创建简单的txt或csv文件之类的pdf文件。它是一种更复杂的文件类型。

查看DomPDF,对于您的设置可能看起来有点像下面(假设$HTTP_RAW_POST_DATA是html文档):

require("dompdf_config.inc.php");
$semi_rand = md5(time());
$pdf = file_get_contents('http://www.pdfpage.com/');
$file = $semi_rand . ".pdf"; 
$dompdf = new DOMPDF();
$dompdf->load_html($pdf);
$dompdf->set_paper('a4', 'portrait');
$dompdf->render();
$dompdf->stream($file,  array('Attachment' => '0'));
...
// USE $file as needed in email attachment