【发布时间】:2017-07-14 20:13:37
【问题描述】:
我在使用 DOMPDF 库生成 pdf 并同时通过邮件发送时遇到问题。
我需要的是在你点击html中的按钮的那一刻生成并同时发送pdf文件;到目前为止,只向我发送已生成 pdf 的邮件,但我需要生成和发送 pdf。 首先将数据收集到数据库中,然后使用数据库中的最新记录生成 pdf。
我希望有人可以帮助我。
谢谢
注意:不使用框架
【问题讨论】:
我在使用 DOMPDF 库生成 pdf 并同时通过邮件发送时遇到问题。
我需要的是在你点击html中的按钮的那一刻生成并同时发送pdf文件;到目前为止,只向我发送已生成 pdf 的邮件,但我需要生成和发送 pdf。 首先将数据收集到数据库中,然后使用数据库中的最新记录生成 pdf。
我希望有人可以帮助我。
谢谢
注意:不使用框架
【问题讨论】:
您必须使用 PHP 的内置 SMTP 函数或使用诸如 PHPMailer 之类的库(不是框架)
生成 PDF 后,将其保存在服务器上的某个位置,保留 PDF 文件的完整路径并调用邮件脚本以发送带有附件的邮件(附件为 PDF)
使用 PHP Mailer 可能看起来像这样:
$mail = new PHPMailer;
$mail->addAddress('your_email@example.com');
$mail->addAttachment('/path/to/your/file.pdf', 'name as shown in the email.pdf');
$mail->send();
当然,您必须使用发送邮件的主机配置您的邮件、进行身份验证等...但这不是您所要求的。
只需将 /path/to/your/file.pdf 替换为 PDF 文件的路径 + 文件名(在服务器上),然后将 name as shown in the email.pdf 替换为您希望电子邮件接收者看到的名称,例如“invoice.pdf”
【讨论】:
试试这个
<?php
define('DBHOST','localhost');
define('DBNAME','user');
define('DBUSER','root');
define('PASS','');
$dbh = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME,DBUSER,PASS);
$q_sel="SELECT name,email from user_details";
$stmt_query=$dbh->prepare($q_sel);
$user_detail_exe=$stmt_query->execute();
$user_details=$stmt_query->fetchAll();
?>
<html>
<head>
<title>
Send Email Generating Dompdf
</title>
</head>
<body>
<form action="send_email.php">
<input type="submit" value="EMAIL" />
<table style="width:100%" border="1">
<tr>
<th>Name</th>
<th>Email</th>
</tr>
<?php
foreach ($user_details as $user_detail)
{
?>
<tr>
<td><?php echo $user_detail['name'];?></td>
<td><?php echo $user_detail['email'];?></td>
</tr>
<?php
}
?>
</table>
</form>
</body>
</html>
send_email.php
<?php
$name='user_detaiil.pdf';
require_once 'dompdf/dompdf_config.inc.php';
require_once 'Swift/lib/swift_required.php';
define('DBHOST','localhost');
define('DBNAME','user');
define('DBUSER','root');
define('PASS','');
$dbh = new PDO('mysql:host='.DBHOST.';dbname='.DBNAME,DBUSER,PASS);
$q_sel="SELECT name,email from user_details";
$stmt_query=$dbh->prepare($q_sel);
$user_detail_exe=$stmt_query->execute();
$user_details=$stmt_query->fetchAll();
$pdf_data='<html>
<body>
<table style="width:100%" border="1">
<tr>
<th>Name</th>
<th>Email</th>
</tr>';
foreach ($user_details as $user_detail)
{
$pdf_data.='<tr>
<td>'.$user_detail['name'].'</td>
<td>'.$user_detail['email'].'</td>
</tr>';
}
$pdf_data.='</table>
</body>
</html>';
$dompdf=new DOMPDF();
$dompdf->load_html($pdf_data);
$dompdf->render();
$canvas =$dompdf->get_canvas();
$date = date("d/m/Y");
$canvas->page_text(10, 770,"Date: $date" , $font, 12);
$canvas->page_text(520, 770, "Page: {PAGE_NUM}", $font, 12);
$output = $dompdf->output();
$file_to_save = 'reports/user_detail.pdf';
file_put_contents($file_to_save, $output);
//$dompdf->stream($name);
ob_start();
$HasFunctions = true;
$SendsMail = true;
$message = Swift_Message::newInstance()
->setSubject('User Detail Report')
->setFrom(array('test@gmail.com'))
->setTo(array('test@gmail.com'))
->setBody($messagetext, 'text/html');
$message->attach(Swift_Attachment::fromPath("reports/user_detail.pdf"));
$transport = Swift_SmtpTransport::newInstance("smtp.fake.com", 25)
->setUsername("Username")
->setPassword("Password");
$mailer = Swift_Mailer::newInstance($transport);
$result = $mailer->send($message);
unlink("reports/user_detail.pdf");
if($result)
{
header("LOCATION:dompdf.php");
}
?>
【讨论】: