【问题标题】:PHP & PHPMailer : Can not send an attached file when fopen is disabledPHP & PHPMailer:禁用 fopen 时无法发送附件
【发布时间】:2023-03-15 16:19:01
【问题描述】:

我已经使用 PHPMailer 10 年了,没有任何问题。 但是,现在我的服务器需要禁用 PHP 中的“fopen”,这会影响 PHPMailer 中的“file_get_contents”。 我尝试使用 CURL 而不是“file_get_contents”。 一切正常,发送文本,但无法发送附件。 这是我使用的 CURL,而不是“file_get_contents”:

function file_get_contents_curl($url) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
  curl_setopt($ch, CURLOPT_HEADER, 0);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_URL, $url);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
  curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);       
  $data = curl_exec($ch);
  curl_close($ch);
  return $data;
}

我使用 PHPMailer 6.1.6。 问题出在 PHPMailer.php 中,函数 encodeFile @ line 3143

$file_buffer = file_get_contents($path);

如何发送没有“file_get_contents”的文件; 请帮帮我,我尝试解决这个问题一个月。

提前谢谢你。 呐。


发送消息时出现以下错误:

30352#0: *9113244 FastCGI 在标准错误中发送:“PHP 消息:PHP 致命错误:未捕获的 PHPMailer\PHPMailer\Exception:文件错误:无法打开文件:/var/www/vhosts/ 中的 temp/attachFile.jpg kjubzz.com/php7v5.kjubzz.com/lib/PHPMailer/src/PHPMailer.php:3147 堆栈跟踪:

#0 /var/www/vhosts/kjubzz.com/php7v5.kjubzz.com/lib/PHPMailer/src/PHPMailer.php(3115): PHPMailer\PHPMailer\PHPMailer->encodeFile()

#1 /var/www/vhosts/kjubzz.com/php7v5.kjubzz.com/lib/PHPMailer/src/PHPMailer.php(2624): PHPMailer\PHPMailer\PHPMailer->attachAll()

#2 /var/www/vhosts/kjubzz.com/php7v5.kjubzz.com/lib/PHPMailer/src/PHPMailer.php(1532): PHPMailer\PHPMailer\PHPMailer->createBody()

#3 /var/www/vhosts/kjubzz.com/php7v5.kjubzz.com/lib/PHPMailer/src/PHPMailer.php(1430): PHPMailer\PHPMailer\PHPMailer->preSend()

#4 /var/www/vhosts/kjubzz.com/php7v5.kjubzz.com/contact3.php(157): PHPMailer\PHPMailer\PHPMailer->send()

#5 {主} 在阅读上游时在第 3147 行抛出 /var/www/vhosts/kjubzz.com/php7v5.kjubzz.com/lib/PHPMailer/src/PHPMailer.php"

【问题讨论】:

  • 您能否告诉我们您是否收到此代码的错误?

标签: php curl phpmailer


【解决方案1】:

我回答了这个on Github

我在这里的主要建议是切换到提供适当 PHP 配置的托管服务提供商。

如果做不到这一点,您可以通过任何方式检索文件(curl 很好),但如果您根本无法直接读取或写入本地文件,这一切都需要在内存中进行,PHPMailer 提供了 addStringAttachment( ) 方法允许您这样做,因此您可以按照上面的代码:

$mail->addStringAttachment(file_get_contents_curl($url), 'myimage.jpg'); 这一切都应该解决。请记住,尽管您需要比我在这里建议的更小心一些 - 您需要对响应进行一些错误检查,以防在将结果交给 PHPMailer 之前获取失败。

【讨论】:

  • 非常感谢 Synchro,我尝试了您的代码,但没有运气。 $mail->addStringAttachment(file_get_contents_curl($url), 'myimage.jpg');已发送消息(无错误)、文本和文件,但无法打开 Gmail 中显示的附件。 gmail中的附件显示其名称但0字节并且无法打开(attachfile.jpg)请帮助我。
猜你喜欢
  • 2017-12-05
  • 1970-01-01
  • 2012-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
相关资源
最近更新 更多