2017-10-10 84 views
1

我正在运行一个运行一系列SQL查询的PHP脚本,将结果写入CSV并保存。它还会将报告发送给收件人。PHPMailer,附件设置无法访问文件(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 = "[email protected]"; 

      try{ 
      $mail->setFrom("[email protected]"); 
      $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

这是因为$fp是一个开放的文件句柄; PHPMailer期待一个包含文件路径的字符串被传递给addAttachment()。因此,移动电话fclose创建PHPMailer的实例之前,然后再做到这一点:

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

这完美地工作,我完全忽略了一个事实,即它不能使用该句柄。谢谢! –