PHP mail函数未添加X-PHP-Script头的问题咨询
问题解答
1. PHP 8.x 中X-PHP-Script头的变化
从PHP 7.4开始,官方弃用了X-PHP-Script头,转而用X-PHP-Originating-Script替代。你记忆中“PHP mail默认添加X-PHP-Script”是PHP 7.3及更早版本的行为,新版本已移除该头的自动生成逻辑——哪怕开启mail.add_x_header = On,也只会生成格式为X-PHP-Originating-Script: UID:文件名的头。
若要自动添加X-PHP-Script,推荐两种方案:
- 封装自定义邮件函数:在项目中替代原生
mail(),自动拼接目标头信息,示例代码:
function custom_mail($to, $subject, $message, $headers = '', $parameters = '') { $server_name = $_SERVER['SERVER_NAME'] ?? 'unknown-server'; $php_self = $_SERVER['PHP_SELF'] ?? 'unknown-script'; $remote_addr = $_SERVER['REMOTE_ADDR'] ?? 'unknown-addr'; $x_script_header = "X-PHP-Script: $server_name$php_self for $remote_addr\r\n"; // 合并原有头信息 $headers = empty($headers) ? $x_script_header : $headers . "\r\n" . $x_script_header; return mail($to, $subject, $message, $headers, $parameters); }
后续项目统一调用custom_mail()即可,无需修改php.ini。
- 修改PHP源码编译(不推荐):找到PHP mail函数源码文件
ext/standard/mail.c,手动添加X-PHP-Script头的生成逻辑后重新编译PHP。此方法维护成本高,仅适合有定制化需求的场景。
2. cPanel共享服务器上X-PHP-Script的来源
在cPanel环境中,这个头并非PHP原生添加,而是由cPanel集成的Exim邮件服务器过滤规则或cPanel定制的PHPMailer补丁注入的。cPanel为兼容旧版应用需求,在邮件投递流程中额外添加了该头信息,属于平台对PHP和邮件服务的定制化修改,并非PHP官方行为。
内容的提问来源于stack exchange,提问作者vvkatwss vvkatwss
相关产品推荐
相关产品推荐

