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

PHPMailer设置表单邮箱为发件人却显示收件人邮箱问题

问题分析

你遇到的核心问题是主流SMTP服务商(比如Gmail)的发件人强制替换机制:为防范邮件伪造,这类服务会自动将发件人地址替换为你SMTP登录的账号邮箱(即代码里的RECEIVER@gmail.com),忽略你通过setFrom()设置的用户提交邮箱。

解决方案

1. 核心修复:添加回复地址

虽然无法直接显示用户提交的邮箱为发件人,但可以设置Reply-To,让收件人回复邮件时自动指向用户的邮箱,这是最实用的替代方案。

2. 优化发件人显示(可选)

将setFrom()改为使用SMTP登录邮箱,搭配固定的网站名称(比如“网站反馈”),避免显示混乱。

修改后的PHP代码

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

require 'phpmailer/src/Exception.php';
require 'phpmailer/src/PHPMailer.php';
require 'phpmailer/src/SMTP.php';

if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["send"])) {
    $name = $_POST["name"];
    $email = $_POST["email"];
    $message = $_POST["message"];

    $mail = new PHPMailer(true);

    try {
        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = 'RECEIVER@gmail.com';
        $mail->Password = 'SECRET';
        $mail->SMTPSecure = "ssl";
        $mail->Port = 465;

        // 发件人:使用SMTP登录邮箱,搭配网站名称
        $mail->setFrom($mail->Username, "网站反馈");
        // 收件人
        $mail->addAddress("RECEIVER@gmail.com");
        // 关键:添加回复地址,指向用户提交的邮箱
        $mail->addReplyTo($email, $name);

        // 内容调整:HTML格式下用<br>替代换行符
        $mail->isHTML(true);
        $mail->Subject = $_POST["subject"];
        $mail->Body = "Name: $name<br>Email: $email<br><br>Message:<br>$message";

        $mail->send();
        echo "发送成功!";
    } catch (Exception $e) {
        echo "邮件发送失败。错误信息: {$mail->ErrorInfo}";
    }
}

额外注意事项

  • Gmail用户需使用App密码(推荐,更安全)或开启“低安全性应用访问”才能正常登录SMTP;
  • 不要直接用用户提交的邮箱作为setFrom地址,除了会被服务商替换,还可能触发垃圾邮件检测(发件人域名与SMTP服务器域名不一致)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 02:57:11