PHP SMTP Office 365-发送附件

PHP SMTP Office 365-发送附件,php,smtp,office365,phpmailer,Php,Smtp,Office365,Phpmailer,我正在使用Office 365身份验证发送PHPMailer电子邮件 这很好用。然而,我正在努力让脚本发送附件 这是我的密码 require_once('phpMailer/PHPMailerAutoload.php'); $mail = new PHPMailer(true); $mail->isSMTP(); $mail->Host = 'smtp.office365.com'; $mail->Port = 587; $mail->SMTPSecure =

我正在使用Office 365身份验证发送PHPMailer电子邮件

这很好用。然而,我正在努力让脚本发送附件

这是我的密码

require_once('phpMailer/PHPMailerAutoload.php');
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'smtp.office365.com';
$mail->Port       = 587;
$mail->SMTPSecure = 'tls';
$mail->SMTPAuth   = true;
$mail->Username = 'xxx@xx.com';
$mail->Password = 'XXXXX';
$mail->SetFrom('XXX@XXX.com', 'FromEmail');
$mail->addAddress('XXX@XXX.com', 'ToEmail');
$mail->addAttachment("GeneratedPDFFiles/Invoices/Invoice $last_id.pdf");     
$mail->SMTPDebug  = 3;
$mail->Debugoutput = function($str, $level) {echo "debug level $level; message: $str";}; $mail->Debugoutput = 'echo';
$mail->IsHTML(true);
当我删除附件行的电子邮件发送罚款,但有行,没有电子邮件发送


该文件位于目录中,因此这不是问题所在。

这里有几处错误

首先,我可以看到您使用的是旧版本的PHPMailer,所以请升级,最好使用composer

您正在创建这样一个实例:

$mail = new PHPMailer(true);
true
意味着PHPMailer将抛出异常,但PHPMailer方法调用周围没有try/catch块,因此当异常发生时,代码将失效。在适当的地方添加try/catch块,或者删除该
true
param,以通过返回值处理错误

我想它会死在这里:

$mail->addAttachment("GeneratedPDFFiles/Invoices/Invoice $last_id.pdf");     
当你说“文件存在于目录中,所以这不是问题”时,你假设这是真的——不要;检查。如果文件不存在,或者脚本没有读取权限,此方法将抛出异常(除非您在构造函数中删除了
true
param)

您使用了相对路径,但您的工作目录可能不在您认为的位置。使用绝对路径更安全,例如通过预先指定当前脚本的位置(可能与
不同)。无论原因是什么,最好也检查返回值:

$file = __DIR__ . "/GeneratedPDFFiles/Invoices/Invoice $last_id.pdf";
if (!$mail->addAttachment($file)) {
    die('Could not open file ' . $file);
}

谢谢,但是问题一定出在
$last\u id
变量上。当我删除此文件并添加文件名时,电子邮件会发送一个附件