You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHPMailer+PostgreSQL发邮件提示preg_match_all参数类型错误怎么办

报错原因

你代码中存在类型传参错误,具体问题如下:

  • 初始化的$html是fopen()返回的文件资源句柄(resource类型),并非HTML内容字符串
  • 写完HTML内容、执行fclose($html)后,你直接将已经关闭的文件资源句柄传给了sentEmailsReport函数的第四个参数
  • PHPMailer的MsgHTML()方法需要接收字符串类型的HTML内容作为参数,其内部会调用preg_match_all()处理内容,你传入资源类型就触发了对应报错,邮件内容异常也是因为没有传入实际的HTML文本。

解决方案

有两种可选方案,可根据你的需求选择:

方案1:直接拼接HTML字符串(不需要保留本地HTML文件时使用)

放弃通过文件句柄写本地文件的逻辑,直接用字符串变量拼接所有HTML内容,调整示例:

// 初始化改为字符串变量
$html = '';
$newline = "\r\n";
// 原来的所有fwrite($html, xxx)改为字符串拼接
$html .= '<html>'.$newline;
$html .= '<head>'.$newline;
// ... 其余所有HTML生成逻辑全部替换为.=拼接
// 不需要fclose操作
// 后续调用邮件函数直接传$html即可
sentEmailsReport($subject, $clientEmails, $companyEmails, $html, $attachment);

方案2:读取本地文件内容(需要保留本地HTML文件时使用)

写完文件关闭句柄后,读取文件的实际内容再传给邮件函数,调整示例:

// 原有写文件逻辑不变,fclose($html)之后新增代码
$htmlContent = file_get_contents("Status_movile_tccu.html");
// 调用邮件函数时传读取到的内容字符串,不要传原来的$html句柄
sentEmailsReport($subject, $clientEmails, $companyEmails, $htmlContent, $attachment);

内容的提问来源于stack exchange,提问作者Francisco Morales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 17:36:04