使用PHPMailer搭建网站联系页遇问题:收件时发件人与收件人Gmail一致
解决PHPMailer发送Gmail时发件人显示与收件人相同的问题
问题原因
Gmail的SMTP服务有严格的发件人身份验证规则:当你用自己的Gmail账号登录SMTP发送邮件时,Gmail会强制将发件人地址替换为你的登录邮箱,不允许直接使用用户提交的外部邮箱作为发件人地址。同时你的代码里重复设置了setFrom和$mail->From,这不仅冗余,还会触发Gmail的地址替换机制,导致发件人显示为你的收件人邮箱(若收件人也是你的Gmail)。
修复步骤
- 将
setFrom的地址改为你的Gmail登录邮箱(即$mail->Username对应的地址),可以自定义发件人名称,比如结合用户提交的名字,让收件人知道是谁发起的反馈。 - 使用
addReplyTo方法设置用户的邮箱,这样收件人回复邮件时会自动发送到用户的邮箱,而不是你的Gmail。 - 移除冗余的
$mail->From = $email;代码,PHPMailer推荐用setFrom来设置发件人信息。 - 确保你的Gmail账号已开启SMTP服务,如果开启了两步验证,需要使用应用专用密码作为
$mail->Password,而非普通登录密码。
修正后的代码
use PHPMailer\PHPMailer\PHPMailer; if (isset($_POST['name']) && isset($_POST['email'])) { $name = filter_var($_POST['name'], FILTER_SANITIZE_STRING); $email = filter_var($_POST['mail'], FILTER_SANITIZE_STRING); $subject = filter_var($_POST['subject'], FILTER_SANITIZE_STRING); $body = filter_var($_POST['body'], FILTER_SANITIZE_STRING); require_once "PHPMailer/PHPMailer.php"; require_once "PHPMailer/SMTP.php"; require_once "PHPMailer/Exception.php"; $mail = new PHPMailer(); $mail->CharSet = 'UTF-8'; //SMTP设置 $mail->isSMTP(); $mail->Host = "smtp.gmail.com"; $mail->SMTPAuth = true; $mail->Username = "your-gmail-address@gmail.com"; // 你的Gmail登录邮箱 $mail->Password = "your-app-password"; // 应用专用密码(若开启两步验证)或普通密码 $mail->Port = 465; $mail->SMTPSecure = "ssl"; //邮件设置 $mail->isHTML(true); // 设置发件人为你的Gmail,名称结合用户信息标识来源 $mail->setFrom($mail->Username, "{$name} 提交的网站反馈"); $mail->addAddress("ennokhba22@gmail.com"); // 收件人邮箱 // 添加回复地址为用户的邮箱,方便直接回复用户 $mail->addReplyTo($email, $name); $mail->Subject = $subject; $mail->Body = $body; // 执行发送并处理结果 if (!$mail->send()) { echo "邮件发送失败: " . $mail->ErrorInfo; } else { echo "邮件发送成功!"; } }
内容的提问来源于stack exchange,提问作者Oussama Seddiki
相关产品推荐
相关产品推荐

