Я работаю над веб-приложением, используя PHP как серверную и jQuery-инфраструктуру как клиентскую.PHP - непредвиденное поведение Dompdf и PHPMailer
Один из сценариев приложения - отправить электронное письмо с прикрепленным файлом PDF. Я делаю это с использованием библиотек PHPMailer и Dompdf.
Я создал функцию с именем sendMail
в имени файла send.php
принять 4 параметра (адрес электронной почты получателя, тему, данные, номер электронной почты) последний параметр - это потому, что я могу отправить 5 разных писем в зависимости от ситуации и параметра данных данные будут отображаться в элементе электронной почты html.
Проблема в том, что я вызываю функцию из send.php, она работает, как ожидалось, отправленное электронное письмо и файл PDF, созданный и прикрепленный к письму.
, но когда мне требуется send.php
в любом другом файле и звоните sendMail
функция Я получаю электронное письмо только без PDF-файла, а файл даже не сгенерирован или сохранен на сервере.
send.php
<?php
require_once 'dompdf/autoload.inc.php';
// reference the Dompdf namespace
use Dompdf\Dompdf;
require 'PHPMailerAutoload.php';
$body = "test message";
sendMail('[email protected]','MLS mail',$body,5);
function sendMail($email,$subject,$body,$index){
$mail = new PHPMailer;
$mail->IsSMTP(); // telling the class to use SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // SMTP authentication
$mail->SMTPSecure = 'tls'; // secure transfer enabled REQUIRED for GMail
$mail->Host = "smtp.gmail.com"; // SMTP server
$mail->Port = 587; // SMTP Port
$mail->Username = "[email protected]"; // SMTP account username
$mail->Password = "Password"; // SMTP account password // TCP port to connect to
$mail->From = '[email protected]';
$mail->FromName = 'Wilson';
$mail->addAddress($email); // Add a recipient
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = $subject;
$mail->Body=$body;
// instantiate and use the dompdf class
$dompdf = new Dompdf();
$dompdf->loadHtml($body);
// Render the HTML as PDF
$dompdf->render();
$output = $dompdf->output();
$file_to_save= "../work-orderes/file.pdf";
file_put_contents($file_to_save, $output);
$mail->addAttachment('../work-orderes/file.pdf');
if(!$mail->send()) {
// echo $mail->ErrorInfo;
} else {
return 1;
}
}
?>
save.php
<?php
require("sendSmtp/send.php");
session_start();
$body = "Hello World!";
sendMail('[email protected]','MLS mail',$body,5);
?>
Любые предложения о том, почему DOMPDF не работает при вызове его из любого другого файла ??
То, что я пытался
- извлекая DOMPDF и установите последнюю стабильную версию от here
- очистки весь код и просто оставить функцию Sendmail и назвав его
- попытаться написать код из the beginnig
Получите одну вещь, работающую одновременно, не пытайтесь делать все сразу. Вы не проверяете возвращаемые значения (например, на 'file_put_contents'), и вы основали свой код на устаревшем примере PHPMailer, поэтому убедитесь, что используете последнюю версию GitHub. Этот вопрос также почти идентичен тому, который был опубликован вчера - это какое-то задание? – Synchro
@Synchro Спасибо за ваш ответ, код, который я опубликовал, - это реальный код из моего приложения и службы рассылки, отлично работающий, я не видел вопроса, о котором вы говорите, пожалуйста, напишите ссылку на него, и я попробую вашу идею для проверки 'file_put_contents' first –
Нет ошибок или предупреждений? Это может быть проблема с автозагрузчиком или с сохранением файла. Является ли save.php в том же месте, что и send.php? – BrianS