我正在运行Wordpress并拥有多个用户。每个用户应该收到每周报告,其中包含一些仅与该用户相关的唯一信息。信息应以PDF格式收集(使用mpdf生成pdf)并相应地发送给每个用户的电子邮件。
我有report.php文件(我将在此文件上运行cron job以每周发送报告),这是我的代码:
include('mpdf/mpdf.php');
$mpdf = new mPDF();
$args = array(
'post_type' => 'users',
'post_status' => array( 'publish' ),
'order' => 'DESC',
'posts_per_page'=> -1
);
$list = get_posts($args);
if($list){
foreach($list as $suppItem){
$userID = $suppItem->ID;
ob_start();
getUserReport($userID); /* this is the function which genarates html content
for each user because the content of course for each user is unique */
$x = ob_get_contents();
ob_end_clean();
$mpdf->WriteHTML($x);
$today = date('Y-m-d');
$pdfName = 'weekly-report-'.$userID.'-'.$today.'.pdf';
$content = $mpdf->Output($pdfName, 'S');
$content = chunk_split(base64_encode($content));
$email = get_field('user_e_mail_address', $userID);
if($email) {
$mailto = $email;
}
$from_name = 'Website';
$from_mail = 'info@example.com';
$replyto = 'info@example.com';
$uid = md5(uniqid(time()));
$subject = 'Weekly report of '.get_the_title($userID);
$message = 'Attached find this week report.';
$filename = $pdfName;
$header = "From: ".$from_name." <".$from_mail.">\r\n";
$header .= "Reply-To: ".$replyto."\r\n";
$header .= "MIME-Version: 1.0"."\r\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\""."\r\n";
$finalmessage .= "--".$uid."\r\n";
$finalmessage .= "Content-type:text/plain; charset=iso-8859-1"."\r\n";
$finalmessage .= "Content-Transfer-Encoding: 7bit"."\r\n";
$finalmessage .= $message."\r\n";
$finalmessage .= "--".$uid."\r\n";
$finalmessage .= "Content-Type: application/pdf; name=\"".$filename."\"\r\n";
$finalmessage .= "Content-Transfer-Encoding: base64\r\n";
$finalmessage .= "Content-Disposition: attachment; filename=\"".$filename."\""."\r\n";
$finalmessage .= $content."\r\n";
$finalmessage .= "--".$uid."--";
if (mail($mailto, $subject, $finalmessage, $header)) {
echo 'Sent!';
} else {
echo 'error';
}
}
}
当我在代码上方运行时,它会向附有PDF的每个用户发送电子邮件,但所有内容都相同。 PDF文件名是预期的但内容是错误的(循环中的第一项除外)。实际上,第一个用户的电子邮件正文和PDF是正确的,但其余用户的PDF与第一个用户的内容相同,但有一些空白页。
我试图将$content = $mpdf->Output($pdfName, 'S');
移到foreach循环之外,但在这种情况下,它会收集所有用户的内容并发送相同的PDF。但每个用户都应该收到相应的PDF。
我想知道我在循环内部/外部缺少什么,以便将相应的PDF发送到相应的用户电子邮件。
答案 0 :(得分:1)
<强>更新强>
最后它正在运作。我试图将这一行($mpdf = new mPDF()
)移动到foreach循环中,它可以工作!下面你可以看到我的代码在内部循环中的样子:
$mpdf = new mPDF();
ob_start();
getUserReport($userID);
$html = ob_get_contents();
ob_end_clean();
$mpdf->WriteHTML($html);
我希望这将有助于将来的某个人!
答案 1 :(得分:0)
在我看来,ob_get_contents()
每次只检索第一个条目。你能清楚ob_get_contents()
吗?或者您可以尝试将html代码作为字符串从getUserReport(...)
- Method。
修改强>
...
$html = getUserReport(...); // get the report
$mpdf->WriteHTML($html); // write the report to pdf
$html = ""; // clear the local variable
...