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

PHPMailer发件人邮箱显示异常:表单填写与实际收件显示不符

问题原因

你用的是Gmail SMTP服务,它有严格的发件人验证规则:通过SMTP认证的账号必须与发件人邮箱一致。所以你虽然用$mail->setFrom($_POST['email'])设置了用户的邮箱,但Gmail会自动把发件人替换成你登录SMTP的那个邮箱(也就是$mail->Username里的地址),这是平台为防止伪造发件人设置的强制规则。

解决方案

正确的处理方式是:

  • 发件人邮箱必须和SMTP登录账号保持一致
  • 通过addReplyTo设置用户填写的邮箱,确保你回复邮件时能直接发给用户
  • 在邮件内容里明确标注用户的姓名、邮箱信息,方便你识别发件人身份
  • 可选:给setFrom添加第二个参数,设置显示名称,比如带上用户的名字,让你在收件箱里能快速看到是谁发来的

另外你的HTML表单有个小bug:Subject和Message的label标签for属性都写的是name,应该改成对应输入框的id(subject和message),否则点击标签无法聚焦到对应输入框。

修改后的代码

HTML表单

<form action="send-mail.php" method="post">
    <div class="b-form__inputWrap">
        <label for="name">Name</label>
        <input name="name" id="name">
    </div>

    <div class="b-form__inputWrap">
        <label for="email">email</label>
        <input name="email" id="email">
    </div>

    <div class="b-form__inputWrap">
        <label for="subject">Subject</label>
        <input name="subject" id="subject">
    </div>

    <div class="b-form__inputWrap">
        <label for="message">Message</label>
        <textarea name="message" id="message" placeholder="enter message"></textarea>
    </div>

    <button class="b-form__btn" type="submit" name="submit">Send</button>
</form>

PHP代码

<?php
error_reporting(E_ALL);
ini_set('display_errors', 1); 

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

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

if (isset($_POST["submit"])) {
    try {
        $mail = new PHPMailer(true);

        $mail->isSMTP();
        $mail->Host = 'smtp.gmail.com';
        $mail->SMTPAuth = true;
        $mail->Username = '$$$$$$$$$$'; // 你的Gmail账号
        $mail->Password = '$$$$$$$$$$$$$$$$$'; // 你的Gmail应用密码(开启两步验证时需用这个)
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;            
        $mail->Port = 465;   

        // 发件人必须和SMTP账号一致,设置显示名称为用户姓名+标识
        $mail->setFrom($mail->Username, $_POST['name'] . ' (表单发送)');
        $mail->addAddress('$$$$$$$$$$$$$'); // 你的收件邮箱
        $mail->addReplyTo($_POST['email'], $_POST['name']); // 回复目标设为用户邮箱
    
        $mail->isHTML(true);

        $mail->Subject = $_POST["subject"];
        // 邮件内容加入用户信息,方便识别
        $mail->Body = "
            <p>发送人姓名: {$_POST['name']}</p>
            <p>发送人邮箱: {$_POST['email']}</p>
            <h3>留言内容:</h3>
            <p>{$_POST['message']}</p>
        ";

        $mail->send();
        echo 'Email sent successfully!';
    } catch (Exception $e) {
        echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
    }
}
?>
补充提示
  1. 如果你的Gmail开启了两步验证,必须使用应用密码代替普通账号密码登录SMTP,直接用原密码会报错。
  2. 建议对用户输入做基础验证,比如用filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)检查邮箱格式,避免无效数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:42:06