PHP - Dompdf 和 PHPMailer 意外行为
PHP - Dompdf and PHPMailer unexpected behavior
我正在开发一个 Web 应用程序,使用 PHP 作为服务器端,使用 jQuery 框架作为客户端。
该应用程序的一个场景是发送一封附有 pdf 文件的电子邮件,我正在使用 PHPMailer 和 Dompdf 库执行此操作。
我在文件名 send.php
中创建了一个名为 sendMail
的函数接受 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('peter@w34.co','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 = "peterwilson.intake34@gmail.com"; // SMTP account username
$mail->Password = "Password"; // SMTP account password // TCP port to connect to
$mail->From = 'peter@example.com';
$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('peter@w34.co','MLS mail',$body,5);
?>
关于为什么从任何其他文件调用 Dompdf 时 Dompdf 不起作用的任何建议??
我试过的
- 正在删除 dompdf 并重新安装最新的稳定版本
here
- 清理所有代码,只保留 sendMail 函数并调用它
- 尝试从头开始写代码
我终于解决了!
调试后我发现一切正常,直到 $output = $dompdf->output();
之后我在使用 $file_to_save= "../work-orderes/file.pdf";
保存文件时遇到错误
当我从 send.php 调用函数 sendMail()
时,它工作正常,但是当我从另一个文件调用它时,我收到有关访问路径的错误.
这里的答案是我应该使用绝对路径而不是像下面这样的相对路径
$file_to_save= $_SERVER['DOCUMENT_ROOT']."\work-orderes/file.pdf";
现在文件已成功保存并像预期的那样附加到电子邮件中!
我正在开发一个 Web 应用程序,使用 PHP 作为服务器端,使用 jQuery 框架作为客户端。
该应用程序的一个场景是发送一封附有 pdf 文件的电子邮件,我正在使用 PHPMailer 和 Dompdf 库执行此操作。
我在文件名 send.php
中创建了一个名为 sendMail
的函数接受 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('peter@w34.co','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 = "peterwilson.intake34@gmail.com"; // SMTP account username
$mail->Password = "Password"; // SMTP account password // TCP port to connect to
$mail->From = 'peter@example.com';
$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('peter@w34.co','MLS mail',$body,5);
?>
关于为什么从任何其他文件调用 Dompdf 时 Dompdf 不起作用的任何建议??
我试过的
- 正在删除 dompdf 并重新安装最新的稳定版本 here
- 清理所有代码,只保留 sendMail 函数并调用它
- 尝试从头开始写代码
我终于解决了!
调试后我发现一切正常,直到 $output = $dompdf->output();
之后我在使用 $file_to_save= "../work-orderes/file.pdf";
当我从 send.php 调用函数 sendMail()
时,它工作正常,但是当我从另一个文件调用它时,我收到有关访问路径的错误.
这里的答案是我应该使用绝对路径而不是像下面这样的相对路径
$file_to_save= $_SERVER['DOCUMENT_ROOT']."\work-orderes/file.pdf";
现在文件已成功保存并像预期的那样附加到电子邮件中!