PHPMailer,附件设置无法访问文件(csv fiile)

时间:2017-10-10 13:16:21

标签: php csv phpmailer

我正在运行一个运行一系列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);

1 个答案:

答案 0 :(得分:1)

因为$fp是一个打开的文件句柄; PHPMailer期望包含文件路径的字符串传递给addAttachment()。因此,在创建PHPMailer实例之前移动fclose调用,然后执行以下操作:

$mail->addAttachment('dailyReportTestPHP.csv');