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

PHPMailer发邮件Gmail显示多Received From,如何隐藏服务器信息?

解决PHPMailer发邮件暴露自身服务器信息的问题

问题根源

邮件头里的Received字段是邮件每经过一个服务器就会自动添加的记录。你现在的情况大概率是代码没强制用SMTP直接发送,而是通过本地邮件服务(比如sendmail)转发到SMTP服务器,导致多了一条自身服务器的Received记录;或者用了PHPMailer默认的mail()模式,这个模式会调用本地MTA(邮件传输代理),必然留下服务器信息。

解决办法

1. 强制用SMTP直接发送,绕开本地MTA

修改代码,明确让PHPMailer使用SMTP模式,不要使用mail()或sendmail相关配置。示例代码调整如下:

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

$mail = new PHPMailer(true);
try {
    // 核心配置:强制启用SMTP模式
    $mail->isSMTP();
    // 填写你的SMTP服务器参数
    $mail->Host = 'smtp.gmail.com';
    $mail->SMTPAuth = true;
    $mail->Username = '你的Gmail邮箱地址';
    $mail->Password = '你的Gmail应用专用密码'; // 注意:Gmail目前需使用应用专用密码,不能用原账号密码
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port = 587;

    // 邮件内容配置
    $mail->setFrom('sender@example.com', '发件人名称');
    $mail->addAddress('recipient@example.com', '收件人名称');
    $mail->Subject = '测试邮件主题';
    $mail->Body = '测试邮件内容';

    $mail->send();
} catch (Exception $e) {
    echo "邮件发送失败:{$mail->ErrorInfo}";
}

重点是必须调用$mail->isSMTP();,不要使用$mail->isMail()或$mail->isSendmail(),这两个方法会触发本地MTA,从而添加额外的Received记录。

2. 清理不必要的自定义头信息

如果代码中手动添加过自定义头,或者PHPMailer自动生成了多余的头信息,可以进行清理:

$mail->XMailer = ''; // 清空X-Mailer头,避免暴露PHPMailer版本信息
$mail->ClearCustomHeaders(); // 清除所有自定义头

不过这只是辅助操作,核心问题还是要解决传输过程中产生的Received记录。

3. 修改本地MTA配置(迫不得已时使用)

如果因为特殊需求必须使用本地MTA(比如sendmail),可以配置MTA在转发邮件时删除自身添加的Received记录。以Postfix为例:

  1. 打开Postfix的main.cf配置文件,添加以下内容:
header_checks = regexp:/etc/postfix/header_checks
  1. 在/etc/postfix/header_checks文件中添加:
/^Received:.*/ IGNORE

这样Postfix会忽略自身添加的Received头,但注意这个操作可能影响邮件的可追踪性,需要谨慎使用。

验证方法

发送测试邮件后,在Gmail中查看原始邮件头,确认仅存在SMTP服务器的Received记录,没有自身服务器的相关信息即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 18:22:51