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

使用PHPMailer发送邮件返回true但无法接收的技术求助

PHPMailer发送邮件返回true但无法接收的排查方案

问题描述

此前使用PHPMailer对接Gmail SMTP发送服务请求通知邮件正常,新增两个服务后,所有服务均无法收到邮件,但mail.send()返回true,测试极简PHPMailer代码也出现相同问题。

核心排查步骤

1. 检查Gmail账户权限配置

  • 若开启两步验证,必须使用应用专用密码替代原账户密码登录SMTP,原密码会被直接拒绝。
  • 确认账户未开启"低安全性应用访问"(Gmail已默认禁用),此选项不再支持,必须使用应用密码或OAuth2认证。
  • 登录Gmail后台查看「最近的安全性活动」,确认是否有SMTP登录请求被Google拦截,若有需手动允许并重新生成应用密码。

2. 分析SMTP调试日志

代码中已设置$mail->SMTPDebug = 2,执行发送后查看输出的调试信息:

  • 确认是否真的完成了与Gmail SMTP服务器的握手、邮件发送指令是否被服务器接受
  • 若日志显示"Message sent successfully",说明邮件已提交给Gmail,问题出在Gmail的投递环节而非代码

3. 检查垃圾邮件/归档文件夹

由于发件人和收件人使用同一Gmail账户,邮件极可能被判定为垃圾邮件,直接进入垃圾信箱或归档文件夹,建议:

  • 在Gmail中添加发件邮箱到白名单
  • 修改setFrom方法,添加自定义发件人名称,避免反垃圾系统识别异常:
    $mail->setFrom($USERNAME, "服务请求通知");
    

4. 调整SMTP连接配置

尝试切换端口和加密方式,部分服务器可能封禁465端口:

$mail->SMTPSecure = "tls";
$mail->Port = 587; // 替代原有的ssl/465配置

5. 代码细节优化

  • 回复地址修正:当前addReplyTo使用的是自身账户,应改为用户提交的邮箱,既符合邮件规范也便于后续回复:
    // 以Analisi posizioni服务为例
    $mail->addReplyTo($_POST["ap-email"], $_POST["ap-name"]);
    
  • 附件上传校验:fetchAttachments函数未检查文件上传错误,可能导致无效附件影响投递,建议添加错误判断:
    if($tempFile != "" && $_FILES[$fieldName]["error"][$i] === UPLOAD_ERR_OK) 
        $mailObject->addAttachment($tempFile, $fileName);
    

附用户原始代码

<!DOCTYPE html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <link rel="stylesheet" href="style/desktop/structure.css">
    <link rel="stylesheet" href="style/desktop/common.css">
    <link rel="stylesheet" href="style/desktop/elab-form.css">
</head>
<body>

<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

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

require 'config.php';


function fetchAttachments($mailObject, $fieldName) {
    if(isset($_FILES[$fieldName]["name"])) {
        $numFile = count($_FILES[$fieldName]["name"]);

        for($i=0; $i<$numFile; $i++) {
            $tempFile = $_FILES[$fieldName]["tmp_name"][$i];
            $fileName = $_FILES[$fieldName]["name"][$i];

            if($tempFile != "") 
                $mailObject -> addAttachment($tempFile, $fileName);
        }
        return $numFile;
    }
    return 0;
}

session_start();
$_SESSION['fi'] = 'form';
$source = "index.html";


if(!isset($_POST["ap-confirm"]) and !isset($_POST["e-confirm"]) and !isset($_POST["pm-confirm"]) and !isset($_POST["cnt-confirm"]) and !isset($_POST["wwm-confirm"])) {
    session_destroy();
    header("Location: index.html");
}

$mail = new PHPMailer(true);
$mail -> SMTPDebug = 2;
$mail -> SMTPAuth = true;    
$mail -> Host = "smtp.gmail.com";
$mail -> SMTPSecure = "ssl";
$mail -> Port = 465;

$mail -> Username = $USERNAME;
$mail -> Password = $PASSWORD;

$mail -> setFrom($USERNAME);
$mail -> addAddress($USERNAME);
$mail -> addReplyTo($USERNAME);

$mail -> isHTML(true);
$mail -> Subject = "";
$mail -> Body = "";

// SERVIZI =================================================================
// Analisi posizioni
if(isset($_POST["ap-confirm"])) {
    $mail -> Subject = "Richiesta Analisi delle posizioni assicurative e finanziarie in essere";
    $mail -> Body = $_POST["ap-gender"] . " " .
               "<b>" . addslashes($_POST["ap-name"]) . "</b>" .
               "<br>Professione<b>: " . addslashes($_POST["ap-job"]) . 
               "</b><br><br>Telefono<b>: " . $_POST["ap-tel"] .
               "</b><br>Email<b>: " . $_POST["ap-email"] .
               "</b><br>Data di nascita<b>: " . $_POST["ap-birth"] .
               "</b><br>Residenza<b>: " . addslashes($_POST["ap-address"]) .
               "</b><br>Messaggio<b>: " . addslashes($_POST["ap-message"]) . "</b><br><br>";     

    $fileFetched = fetchAttachments($mail, "ap-file");
    $source = "servizi.html";
}

// Evento
else if(isset($_POST["e-confirm"])) {
    $mail -> Subject = "Evento";
    $mail -> Body = "<b>" . addslashes($_POST["e-name"]) . "</b>" .
               "<br><br>Telefono<b>: " . $_POST["e-tel"] .
               "</b><br>Email<b>: " . addslashes($_POST["e-email"]) . 
               "</b><br>Contesto<b>: " . $_POST["e-context"] .
               "</b><br>Messaggio<b>: " . addslashes($_POST["e-message"]) . "</b><br><br>";
               
    $fileFetched = fetchAttachments($mail, "e-file");
    $source = "servizi.html";
}

// Pianificazione assicurativa
else if(isset($_POST["pm-confirm"])) {
    $mail -> Subject = "Richiesta Pianificazione assicurativa e patrimoniale completa";
    $mail -> Body = $_POST["pm-gender"] . " " .
               "<b>" . addslashes($_POST["pm-name"]) . "</b>" .
               "<br>Professione<b>: " . addslashes($_POST["pm-job"]) . 
               "</b><br><br>Telefono<b>: " . $_POST["pm-tel"] .
               "</b><br>Email<b>: " . $_POST["pm-email"] .
               "</b><br>Data di nascita<b>: " . $_POST["pm-birth"] .
               "</b><br>Residenza<b>: " . addslashes($_POST["pm-address"]) .
               "</b><br><br>Messaggio<b>: " . addslashes($_POST["pm-message"]) . "</b><br><br>";
               
    $fileFetched = fetchAttachments($mail, "pm-file");
    $source = "servizi.html";
}

// CONTATTI ===============================================================
// Contattami
else if(isset($_POST["cnt-confirm"])) {
    $mail -> Subject = "Richiesta di contatto";
    $mail -> Body = "<b>" . addslashes($_POST["cnt-name"]) . "</b> " .
               "<br>Email:<b> " . $_POST["cnt-mail"] . "</b>" .
               "<br>Telefono<b>: " . $_POST["cnt-tel"] . "</b>" .
               "<br><br>Messaggio<b>: " . addslashes($_POST["cnt-message"]) . "</b><br><br>";

    $source = "contattami.html";
}

// Lavora con me
else if(isset($_POST["wwm-confirm"])) {
    $mail -> Subject = "Richiesta di contatto";
    $mail -> Body = "<b>" . addslashes($_POST["wwm-name"]) . "</b> " .
               "<br>Email:<b> " . $_POST["wwm-mail"] . "</b>" .
               "<br>Telefono<b>: " . $_POST["wwm-tel"] . "</b>" .
               "<br><br>Messaggio<b>: " . addslashes($_POST["wwm-message"]) . "</b><br><br>";

    $fileFetched = fetchAttachments($mail, "wwm-file");
    $source = "contattami.html";
}

// LAYOUT =================================================================

echo '<img class="elab-img" src="resources/images/logo/horizontal/FI_logo_affiancato.png">';

if(!$mail -> send()) 
    echo '<h3 class="elab-desc">Errore nell\'invio della richiesta: ' . $mail -> ErrorInfo . '. Riprova più tardi.</h3>';
else 
    echo '<h3 class="elab-desc">La richiesta è stata inviata con successo.</h3>';
    
session_destroy();
header("Refresh: 4; url=" . $source);
?>

</body>
</html>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 15:39:50