PHPMailer,附件设置可以';t访问文件(csv文件)
我正在运行一个PHP脚本,它运行一系列SQL查询,将结果写入CSV并保存。它还将报告邮寄给收件人 代码的CSV部分工作正常,PHPMailer部分发送测试电子邮件没有问题。然而,当我取消注释PHPMailer的附件部分并运行脚本时,它会说“无法访问文件”。当我替换注释时,它会写入文件并再次发送测试电子邮件 我相应地注释/取消注释的行是:PHPMailer,附件设置可以';t访问文件(csv文件),php,csv,phpmailer,Php,Csv,Phpmailer,我正在运行一个PHP脚本,它运行一系列SQL查询,将结果写入CSV并保存。它还将报告邮寄给收件人 代码的CSV部分工作正常,PHPMailer部分发送测试电子邮件没有问题。然而,当我取消注释PHPMailer的附件部分并运行脚本时,它会说“无法访问文件”。当我替换注释时,它会写入文件并再次发送测试电子邮件 我相应地注释/取消注释的行是:$mail->addAttachment($fp) 所以,这两个部分都在工作,但这是我第一次使用PHPMailer,我不确定解决这个问题的最佳方法。据我所知,我正
$mail->addAttachment($fp)代码>
所以,这两个部分都在工作,但这是我第一次使用PHPMailer,我不确定解决这个问题的最佳方法。据我所知,我正确地使用了addAttachment
代码,并在最后关闭了CSV
非常感谢您的帮助
剧本:
if (!$result) die('Couldn\'t fetch records');
$num_fields = mysqli_num_fields($result);
$headers = array();
while ($fieldinfo = mysqli_fetch_field($result)) {
$headers[] = $fieldinfo->name;
}
$fp = fopen('dailyReportTestPHP.csv', 'w');
if ($fp && $result) {
fputcsv($fp, $headers);
while ($row = $result->fetch_array(MYSQLI_NUM)) {
fputcsv($fp, array_values($row));
}
}
$mail = new PHPMailer(true);
$address = "hnorman@jacksonfurnind.com";
try{
$mail->setFrom("hnorman@jacksonfurnind.com");
$mail->addAddress($address);
$mail->addAttachment($fp);
$mail->isHTML(true);
$mail->Subject = "Test";
$mail->Body = "Test";
$mail->Send();
echo 'message sent';
} catch (Exception $e){
echo 'message failed';
echo 'mail error:' . $mail->ErrorInfo;
}
fclose($fp);
这是因为$fp
是一个打开的文件句柄;phpMail需要一个字符串,该字符串包含要传递到addAttachment()
的文件路径。因此,在创建PHPMailer实例之前,将fclose
调用移动到,然后执行以下操作:
$mail->addAttachment('dailyReportTestPHP.csv');
这工作完美无瑕,我完全忽略了一个事实,即它无法使用该手柄。谢谢