我正在考虑用户是否可以将某些信息输入表单并通过mail()
发送。
我希望将详细信息作为PDF附件发送。可能是发件人的姓名和日期/时间。 test_user_06052011.pdf
我有一个PDF设计,但我不确定如何将这个设计集成到用PHP创建PDf。
有没有人有我可以做到的例子或方法?
答案 0 :(得分:4)
创建PDF服务器站点的非常简单的方法是使用wkhtmltopdf。但是,您需要对服务器进行shell访问才能进行设置。
要创建PDF,您需要两个文件:一个是PHP,它生成您想要转换为PDF的HTML。我们说这是invoice.php:
<?php
$id = (int) $_GET['id'];
?>
<h1>This is invoice <?= $id ?></h1>
<p>some content...</p>
另一个,它将获取发票并使用wkhtmltopdf将其转换为PDF:
<?php
$tempPDF = tempnam( '/tmp', 'generated-invoice' );
$url = 'http://yoursite.xx/invoice.php?id=123';
exec( "wkhtmltopdf $url $tempPDF" );
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename=invoice.pdf');
echo file_get_contents( $tempPDF );
unlink( $tempPDF );
创建PDF文件后,您还可以通过以下方式发送带附件的邮件:
<?php
$to = "abc@gmail.com";
$subject = "mail with attachment";
$att = file_get_contents( 'generated.pdf' );
$att = base64_encode( $att );
$att = chunk_split( $att );
$BOUNDARY="anystring";
$headers =<<<END
From: Your Name <abc@gmail.com>
Content-Type: multipart/mixed; boundary=$BOUNDARY
END;
$body =<<<END
--$BOUNDARY
Content-Type: text/plain
See attached file!
--$BOUNDARY
Content-Type: application/pdf
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="your-file.pdf"
$att
--$BOUNDARY--
END;
mail( $to, $subject, $body, $headers );
答案 1 :(得分:3)
如果您使用Acrobat制作了可填写的PDF,这里有一大堆代码可以帮助您入门。此代码需要最新版本的phpmailer才能工作,所以只需下载并将其放在您放入此代码的同一目录中的类文件夹中。将您的pdf表单提交到包含此代码的页面。
/* Branden Sueper 2012
// PDF to Email - PHP 5
// Includes: PHPMailer 5.2.1
*/
<?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.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->IsSMTP(); // telling the class to use SMTP
try {
$mail->Host = "mail.xxxxxxx.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 = "xxxxxxx@xxxxxxx.com"; // GMAIL username
$mail->Password = "xxxxxxxx"; // GMAIL password
$mail->AddAddress('Recipient@xxxxxxx.com', 'First Last');
$mail->SetFrom('reply-to-address@xxxxxxx.com', 'First Last');
$mail->Subject = 'Your Subject';
$mail->Body = 'Hello!';
$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="success.php">';
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);
?>
PHPMailer只需下载PHP邮件程序并根据自己的喜好调整上述代码即可。有关如何创建可填写PDF的更多信息,请转至http://www.adobe.com/products/acrobatpro/create-fillable-pdf-forms.html
祝你好运!我记得花了3天时间试图找出一个非常相似的问题!答案 2 :(得分:3)
以下是完整的代码http://codexhelp.blogspot.in/2017/04/php-email-create-pdf-and-send-with.html
/**/
$mailto = $_POST['mailto'];
$mailfrom = $_POST['mailfrom'];
$mailsubject = $_POST['mailsubject'];
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$description = $_POST['description'];
$description = wordwrap($description, 100, "<br />");
/* break description content every after 100 character. */
$content = '';
$content .= '
<style>
table {
border-collapse: collapse;
}
table{
width:800px;
margin:0 auto;
}
td{
border: 1px solid #e2e2e2;
padding: 10px;
max-width:520px;
word-wrap: break-word;
}
</style>
';
/* you css */
$content .= '<table>';
$content .= '<tr><td>Mail To</td> <td>' . $mailto . '</td> </tr>';
$content .= '<tr><td>Mail From</td> <td>' . $mailfrom . '</td> </tr>';
$content .= '<tr><td>Mail Subject</td> <td>' . $mailsubject . '</td> </tr>';
$content .= '<tr><td>Firstname</td> <td>' . $firstname . '</td> </tr>';
$content .= '<tr><td>Lastname</td> <td>' . $lastname . '</td> </tr>';
$content .= '<tr><td>Description</td> <td>' . $description . '</td> </tr>';
$content .= '</table>';
require_once('html2pdf/html2pdf.class.php');
$to = $mailto;
$from = $mailfrom;
$subject = $mailsubject;
$html2pdf = new HTML2PDF('P', 'A4', 'fr');
$html2pdf->setDefaultFont('Arial');
$html2pdf->writeHTML($content, isset($_GET['vuehtml']));
$html2pdf = new HTML2PDF('P', 'A4', 'fr');
$html2pdf->WriteHTML($content);
$message = "<p>Please see the attachment.</p>";
$separator = md5(time());
$eol = PHP_EOL;
$filename = "pdf-document.pdf";
$pdfdoc = $html2pdf->Output('', 'S');
$attachment = chunk_split(base64_encode($pdfdoc));
$headers = "From: " . $from . $eol;
$headers .= "MIME-Version: 1.0" . $eol;
$headers .= "Content-Type: multipart/mixed; boundary=\"" . $separator . "\"" . $eol . $eol;
$body = '';
$body .= "Content-Transfer-Encoding: 7bit" . $eol;
$body .= "This is a MIME encoded message." . $eol; //had one more .$eol
$body .= "--" . $separator . $eol;
$body .= "Content-Type: text/html; charset=\"iso-8859-1\"" . $eol;
$body .= "Content-Transfer-Encoding: 8bit" . $eol . $eol;
$body .= $message . $eol;
$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 . "--";
if (mail($to, $subject, $body, $headers)) {
$msgsuccess = 'Mail Send Successfully';
} else {
$msgerror = 'Main not send';
}
答案 3 :(得分:2)
今天无法找到使用原生mail()
功能的原因。在大多数微不足道的情况下,我们可以使用PHPMailer库,它在OOP风格中为我们提供了发送电子邮件的机会,即使不了解标题。
甚至而不保存物理文件的解决方案是
$mail = new PHPMailer();
...
$doc = $pdf->Output('S');
$mail->AddStringAttachment($doc, 'doc.pdf', 'base64', 'application/pdf');
$mail->Send();
答案 4 :(得分:1)
了解FPDF - http://www.fpdf.org/ - 它是免费的,是生成PDF的好工具
有一个由PHP推荐的PDF生成器,但它非常昂贵,而且现在这个名字不在我身边,但是我已经多次使用FPDF了。
答案 5 :(得分:1)
根据您的要求,您还可以查看TCPDF,我大量使用它来动态创建PDF ...它内置了(有限的)HTML到PDF功能很容易使用(只看实例)。另一个主要好处是:它仍处于积极发展阶段(有些人可能过于活跃:p)。
答案 6 :(得分:0)
旧问题但仍然相关,因此将其发布在这里以供新访问者使用。
PDFMark 提供了一个 API 来生成 PDF,也可以通过电子邮件发送它。您可以从 HTML 创建 PDF 并指定电子邮件地址,生成的 PDF 将作为附件发送到该地址。
披露:我是开发者