在foreach循环中使用fpdf和phpmailer将pdf发送到多个地址

时间:2016-01-29 22:07:14

标签: php foreach phpmailer fpdf

我有一个复选框表单,其中包含发布到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');

        }
    } 
}

希望有人能指出我正确的方向。

2 个答案:

答案 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