我有一个复选框表单,其中包含发布到pdf.php的作业列表。我要做的是让fpdf生成一个pdf并使用phpmailer发送邮件。
每个复选框都有一个与之关联的不同电子邮件。因此,对于每个选中的框,该文件将生成该特定作业的pdf并将其发送到相应的电子邮件地址
当我只能收到第一封要发送的电子邮件时,如果没有附上pdf,其余的都不会生成任何内容。 以下是表单的示例:
<tr><td>123</td><td><input type="checkbox" name="job[]" value= "123"></td></tr>
<tr><td>456</td><td><input type="checkbox" name="job[]" value= "456"></td></tr>
<tr><td>789</td><td><input type="checkbox" name="job[]" value= "789"></td></tr>
以及pdf生成和电子邮件的简化版本:
require('msqliconnect.php');
require('fpdf.php');
require("PHPMailer.php");
if (isset($_POST['job'])) {
foreach($_POST['job'] as $id) {
//sql query to get more info about job
$sql ="select * from jobs where job = $id";
$queryresult = mysqli_query($con,$sql);
while ($row = mysqli_fetch_array($queryresult,MYSQLI_ASSOC)) {
$pdf = new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial', 'B', 16);
$pdf->Cell(0, 10, $id, 0, 1, 'C');
$pdf->SetFont('Arial', NULL, 12);
$pdf->Cell(0, 10, $row['amount'], 1, 1, 'L');
$pdf->Output('Job#'. $id .'.pdf','F');
$mail = new PHPMailer();
$mail->IsSMTP();
//and so on to generate the email
$mail->AddAttachment('Job#'. $id .'.pdf');
if(!$mail->Send()) {
echo 'Message was not sent.';
echo 'Mailer error: ' . $mail->ErrorInfo;
} else {
echo '<body>Message has been sent.</body>';
}
unlink('Job#'. $id .'.pdf');
}
}
}
希望有人能指出我正确的方向。
答案 0 :(得分:0)
我暂时没有使用phpmailer ....但我认为这应该附加一个文件:
$mail->AddAttachment('job'. $id .'.pdf');
哦...检查生成pdfs的文件夹是否可写!
答案 1 :(得分:0)
阅读你的代码
来自$pdf->Output('Job#'. $id .'.pdf','F');
的问题
有关Output()
的详细信息,请参阅文档http://www.fpdf.org/en/doc/output.htm
解决方案是,如果您使用选项'F'
作为输出,那么您应该放置保存pdf的目录的完整路径。
您可以这样写
$filename='your_full_path_directory_of_pdf_saved/Job_'.$id.'.pdf';
$pdf->Output($filename,'F');
(我将您的"#"
字符更改为"_"
字符,因为文件名中的"#"
可能是不好的做法)
确保你也改变了你的身份
$mail->AddAttachment('Job#'. $id .'.pdf');
到
$mail->AddAttachment($filename');
和
unlink('Job#'. $id .'.pdf');
到
unlink($filename);
CMIIW