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

使用PHPMailer发送邮件无报错但未收到邮件求助

问题排查与修复方案

从你的代码来看,虽然点击提交后弹出了成功提示,但收不到邮件的核心原因是PHPMailer未配置SMTP服务器,同时缺少错误捕获机制——你根本看不到发送失败的真实原因。下面一步步帮你解决问题:

1. 配置SMTP服务器(核心修复)

PHPMailer默认会尝试使用PHP内置的mail()函数,但大多数共享主机或本地环境都没有正确配置邮件发送服务,导致邮件被直接丢弃或无法送达。你必须明确配置SMTP参数,比如使用主机提供商提供的SMTP服务,或者第三方邮箱(如Gmail,注意Gmail需启用应用密码)。

修改PHPMailer初始化部分的代码,添加SMTP配置:

$mail = new PHPMailer;

// 启用SMTP模式
$mail->isSMTP();
// 填写你的SMTP服务器地址(比如主机商提供的smtp.yourdomain.com,或Gmail的smtp.gmail.com)
$mail->Host = 'smtp.yourhost.com';
// SMTP端口(587对应TLS加密,465对应SSL加密,根据服务商要求选)
$mail->Port = 587;
// 启用加密方式
$mail->SMTPSecure = 'tls';
// 开启SMTP认证
$mail->SMTPAuth = true;
// SMTP登录用户名(你的邮箱地址)
$mail->Username = 'your-email@xxx.com';
// SMTP登录密码(Gmail需用应用密码,普通邮箱填登录密码)
$mail->Password = 'your-email-password';

// 保留你原来的代码
$mail->setFrom('xxxx@xxx.com','xxxx');
$mail->addAddress($email);
$mail->isHTML(true);
$mail->Subject = 'Room Enquiry Form';
$mail->Body = $full_message;

2. 添加错误捕获,查看真实失败原因

你的代码只处理了发送成功的情况,失败时没有任何提示,这会让你误以为发送成功。修改代码,添加错误输出:

if ($mail->send()){
    unset($_SESSION['checkin']);
    unset($_SESSION['checkout']);
    unset($_SESSION['room']);
    unset($_SESSION['guest']);
    session_destroy();
    echo 1;
} else {
    // 输出PHPMailer的错误信息,方便精准排查
    echo "邮件发送失败: " . $mail->ErrorInfo;
}

这样如果发送失败,你就能看到具体问题,比如SMTP认证失败、端口被防火墙拦截等。

3. 修复表单验证的小bug

在手机号验证的分支里,提示文字写错了,重复了邮箱的提示,改成:

elseif(empty($mob)){
    echo "Please Enter Mobile No.";
}

4. 额外建议:检查SESSION变量有效性

虽然这不是收不到邮件的直接原因,但为了避免SESSION变量缺失导致邮件内容异常,建议在使用SESSION前添加检查:

// 检查关键预订信息是否存在
if(!isset($_SESSION['checkin']) || !isset($_SESSION['checkout']) || !isset($_SESSION['room']) || !isset($_SESSION['guest'])){
    echo "缺少预订信息,请重新选择房间与日期。";
    exit;
}

测试时,先根据错误提示调整SMTP配置——比如用Gmail的话,需要开启两步验证并创建应用密码,同时确保你的主机允许连接外部SMTP服务器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 09:02:39