我有一个填充的PDF文件,当提交时,通过Adobe Acrobat X中的发送完成的pdf选项将完成的pdf发送到processpdf.php文件(参见下面的代码),代码获取带有$ HTTP_RAW_POST_DATA和e-的原始数据邮寄它。它的电子邮件很好,我得到了pdf,但PDF不会打开chrome / acrobat或任何东西,因为它说它已损坏。我在这做错了什么?
我正在使用PHP5, Adobe Acrobat X, Safari 6
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
if(!isset($HTTP_RAW_POST_DATA)) {
echo "The Application could not be sent. Please save the PDF and email it manually.";
exit;
}
$email_from = "xxx@xxx.com";
$email_subject = "Subject";
$email_txt = "A Form has been sent from xxx.com. See
attachment.";
$email_to = "xxx@xxxxx.com";
$headers = "From: ".$email_from;
$semi_rand = md5(time());
$mime_boundary = "----=_NextPart_x{$semi_rand}x";
$headers .= "\nMIME-Version: 1.0\n" .
"Content-Type: multipart/mixed;\n" .
" boundary=\"{$mime_boundary}\"";
$email_message = "This is a multi-part message in MIME format.\n\n" .
"--{$mime_boundary}\n" .
"Content-Type:text/plain; charset=\"iso-8859-1\"\n" .
"Content-Transfer-Encoding: 7bit\n\n"
.$email_txt. "\n\n";
// This uses the function above as the Version of PHP on the server
//does not have
// it available.
$pdf = $HTTP_RAW_POST_DATA;
$data = chunk_split($pdf);
$email_message .= "--{$mime_boundary}\n" .
"Content-type: application/pdf;\n name=\"App.pdf\"\n" .
"Content-Transfer-Encoding: quoted-printable\n" .
"Content-Disposition: attachment;\n filename=\"App.pdf\"\n\n" .
$data . "\n\n" .
"--{$mime_boundary}--\n";
$ok = mail($email_to, $email_subject, $email_message, $headers);
if($ok) {
echo ("The file was successfully sent!");
} else {
die("Sorry but the email could not be sent. Please go back and try
again!");
}
?>
答案 0 :(得分:0)
我得到了它的工作!感谢phpmailer的建议似乎解决了这个问题。
工作代码。希望这可以帮助那些人花费8个多小时来解决这个问题!我无法相信使用PHP处理可填写PDF的文档很少。使用PHPmailer类和以下代码
<?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'>"; //Loading image
//Create PDF file with the filled 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.phpmailer.php');
$mail = new PHPMailer(true); // the true param means it will throw exceptions on errors, which we need to catch
$mail->IsSMTP(); // telling the class to use SMTP
try {
$mail->Host = "mail.xxxxx.com"; // 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 = "smtp.gmail.com"; // sets GMAIL as the SMTP server
$mail->Port = 465; // set the SMTP port for the GMAIL server
$mail->Username = "XXXX@XXXXXX.com"; // GMAIL username
$mail->Password = "XXXXX"; // GMAIL password
$mail->AddAddress('XXXX@XXXX.com', 'First last');
$mail->SetFrom('XXXX@XXXXXX.com', 'Application ');
$mail->Subject = 'Subject';
$mail->Body = 'Body of the e-mail';
$mail->AddAttachment($file); // attachment
ob_start(); $mail->Send(); ob_get_clean(); //Prevents SMTP responses
unlink($file); //delete the temporary pdf file then redirect to the success page
echo '<META HTTP-EQUIV="Refresh" Content="0; URL=success.php">';
exit;
//otherwise show errors
} catch (phpmailerException $e) {
echo $e->errorMessage(); //Pretty error messages from PHPMailer
} catch (Exception $e) {
echo $e->getMessage(); //Boring error messages from anything else!
}
unlink($file); //doubley make sure the temp pdf gets deleted
?>