PHP mailer и FPDF вложение с циклом - скрипт останавливается после первого запуска - PullRequest
0 голосов
/ 09 октября 2019

Я запускаю следующий скрипт для генерации и отправки электронной почты. Тело электронной почты генерируется в цикле while (содержимое отличается) - оно работает нормально. Но теперь я попытался включить скрипт для генерации PDF-вложения (через библиотеку FPDF), в каждой итерации вложение отличается.

Проблема в том, что цикл запускается только один раз, для первого случая и после его остановки. ,Заранее благодарю за ваши комментарии.

Мой код:

<?
$mail = new PHPMailer();
$mail->SMTPDebug = 1;                                
$mail->isSMTP();   
$mail->addReplyTo('');
$mail->isHTML(true);                              
$mail->Subject = "";
$mail->Host = 'smtp.gmail.com';  
$mail->SMTPAuth = true;                              
$mail->SMTPSecure = 'tls';                            
$mail->Port = 587;                                    
$mail->CharSet = 'utf-8';
$mail->setFrom('');

while(($data=MySQL_Fetch_Array($vysl))!=NULL) {
require_once('invoicetopdf.php');
$message="";
$mail->AddStringAttachment($invoice, 'Invoice.pdf', 'base64', 'application/pdf');
$mail->Username = "";
$mail->Password = "";
$mail->addAddress($to);
$mail->Body = $message;

if (!$mail->send()) {echo "Mailer Error: " . $mail->ErrorInfo;} 

else {

$mail->clearAddresses();
$mail->ClearAllRecipients();
$mail->clearAttachments(); 

echo "Ok";

}  
} //while

//invoicetopdf.php:

$data = MySQL_Fetch_Array($vysl);     

require_once('../knihovny/pdf/fpdf.php');

$pdf = new PDF();
$pdf->.....;

$invoice=$pdf->Output('S');

?>

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Теперь это работает: основной проблемой было смешивание класса и функций вместе. См .: Несколько PDF-файлов в цикле с FPDF

Спасибо, ребята!

0 голосов
/ 09 октября 2019

Это немного странный способ многократно запускать этот код. Я бы определил функцию в вашем invoicetopdf.php файле, загрузил ее в начало вашего скрипта, а затем вызвал функцию внутри цикла, чтобы получить данные PDF. Вы также вызываете mysql_fetch_array дважды - один раз в цикле while, один раз в функции, что означает, что половина ваших данных будет сбиваться с пути.

require_once('invoicetopdf.php');
while(($data=MySQL_Fetch_Array($vysl))!=NULL) {
$message="";
$mail->AddStringAttachment(generatePDF($data), 'Invoice.pdf', 'base64', 'application/pdf');
...
//invoicetopdf.php:
require_once('../knihovny/pdf/fpdf.php');
function generatePDF($data) {
    $pdf = new PDF();
    $pdf->.....;
    return $invoice=$pdf->Output('S');
}

Я также рекомендую переместить Usernameи Password вне цикла, и вам, вероятно, не нужно звонить clearAllRecipients();clearAddresses() достаточно.

Установка SMTPDebug = 2 позволит вам увидеть больше того, что происходит на земле SMTP.

...