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

运行4年的PHP邮件脚本突然失效,未改代码求排查方案

PHP邮件脚本突然无法发送的排查与解决方案

问题背景

  • 脚本已稳定运行4年,近1个月无法发送邮件,期间未做任何修改
  • 服务器PHP版本为7.2,托管于GoDaddy,客服称未改动服务器配置
  • 测试发送至Gmail、Yahoo邮箱均失败

核心疑问解答

1. 邮件协议近期变更情况

Gmail、Yahoo等主流邮箱近年确实强化了发件验证规则:

  • SPF/DKIM/DMARC强制要求:未配置这三类认证记录的发件服务器,邮件大概率会被直接拦截或归入垃圾邮件
  • 端口限制:部分服务商(包括GoDaddy)可能默认封停25端口,需改用465(SSL)或587(TLS)端口发送
  • 发件人验证:不再允许随意伪造From头,很多邮箱会校验发件域名的真实性,你的脚本直接用用户提交的gEmail作为发件人,很容易触发反垃圾机制

2. PHP版本升级建议

PHP7.2已于2020年11月停止所有安全支持,强烈建议升级至8.1:

  • 8.1版本性能更优,安全补丁持续更新
  • 原生mail()函数在新版本中虽无核心变更,但配套的扩展(如openssl)兼容性更好,有助于TLS加密发送
  • 不过升级本身不会直接解决当前邮件发送问题,只是解决长期安全和兼容性隐患

针对性解决方案

替换原生mail()函数为SMTP发送

原生mail()依赖服务器本地sendmail配置,稳定性差,建议改用SMTP认证发送,示例如下(使用PHPMailer):

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

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

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

function mailcheck($field) {
    $field = filter_var($field, FILTER_SANITIZE_EMAIL);
    return filter_var($field, FILTER_VALIDATE_EMAIL);
}

function checkInput($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}

if(isset($_POST['gName'])) {
    if (!mailcheck($_POST['gEmail'])) {
        echo json_encode("Invalid email");
        exit;
    }

    $gName = checkInput($_POST['gName']);
    $gEmail = checkInput($_POST['gEmail']);
    $gComments = checkInput($_POST['gComments']);
    $gRating = checkInput($_POST['gRating']);

    $mBody = "SENT BY - ".$gName."\n";
    $mBody .= "SENDER EMAIL - ".$gEmail."\n";
    $mBody .= "RATING - ".$gRating."\n\n";
    $mBody .= "MESSAGE - ".$gComments."\n";

    $mail = new PHPMailer(true);
    try {
        // SMTP配置(使用GoDaddy提供的SMTP服务器)
        $mail->isSMTP();
        $mail->Host = 'smtpout.secureserver.net'; // GoDaddy SMTP地址
        $mail->SMTPAuth = true;
        $mail->Username = 'your-godaddy-email@yourdomain.com'; // 你的GoDaddy邮箱账号
        $mail->Password = 'your-email-password'; // 邮箱密码
        $mail->SMTPSecure = PHPMailer::ENCRYPTION_SMTPS;
        $mail->Port = 465;

        // 收件人、发件人设置
        $mail->setFrom('your-godaddy-email@yourdomain.com', 'Guest Review System'); // 用自己域名的邮箱作为发件人
        $mail->addAddress('myemail@gmail.com'); // 目标收件邮箱
        $mail->addReplyTo($gEmail, $gName); // 设置回复地址为用户邮箱

        // 邮件内容
        $mail->isHTML(false);
        $mail->Subject = 'Guest Review';
        $mail->Body    = $mBody;

        $mail->send();
        echo json_encode("Review sent. Thank You!");
    } catch (Exception $e) {
        echo json_encode("Error. Please try again. Error detail: {$mail->ErrorInfo}");
    }
}
?>

额外排查步骤

  • 检查域名的SPF、DKIM、DMARC记录是否正确配置(可通过GoDaddy域名管理后台设置)
  • 联系GoDaddy确认服务器的邮件发送权限,是否开启了SMTP服务,是否有发送量限制
  • 查看服务器的邮件日志(通常在/var/log/mail.log或GoDaddy控制面板的邮件日志模块),获取具体错误信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 07:08:12