我正在运行一个运行一系列SQL查询的PHP脚本,将结果写入CSV并保存。它还将报告邮寄给收件人。
代码的CSV部分工作正常,PHPMailer部分发送测试电子邮件没有问题。但是,当我取消注释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);
答案 0 :(得分:1)
因为$fp
是一个打开的文件句柄; PHPMailer期望包含文件路径的字符串传递给addAttachment()
。因此,在创建PHPMailer实例之前移动fclose
调用,然后执行以下操作:
$mail->addAttachment('dailyReportTestPHP.csv');