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

如何不使用Composer,通过require_once()使用最新版PHPMailer?

无需Composer,用require_once部署PHPMailer的完整解决方案

我完全理解你想要纯xcopy式极简部署的需求,之前的报错核心原因是新版PHPMailer使用了命名空间,且不再自带旧版的自动加载文件,直接只引入PHPMailer.php是不够的。下面给你一步步解决的方案:

一、核心解决代码

首先你需要从PHPMailer的Releases页面下载最新的发布版压缩包,解压后把src目录放到你的项目里,然后手动引入3个核心文件,同时处理命名空间问题。完整代码如下:

// 手动引入PHPMailer的核心必需文件
require_once 'src/PHPMailer.php';
require_once 'src/SMTP.php';
require_once 'src/Exception.php';

// 引入命名空间,避免每次写完整类名
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;
use PHPMailer\PHPMailer\Exception;

// 初始化PHPMailer实例,传入true启用异常处理(更便于调试)
$mail = new PHPMailer(true);

try {
    // SMTP配置
    $mail->isSMTP();
    $mail->SMTPDebug = SMTP::DEBUG_SERVER; // 用常量替代数字,更清晰
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->SMTPAuth = true;
    $mail->Username = $smtpUsername; // 替换为你的Gmail账号
    $mail->Password = $smtpPassword; // 替换为你的Gmail应用密码(注意:Gmail现在需要用应用密码,不是原密码)
    
    // 发件人与收件人设置
    $mail->setFrom($emailFrom, $emailFromName);
    $mail->addAddress($emailTo, $emailToName);
    
    // 邮件内容设置
    $mail->Subject = 'PHPMailer GMail SMTP test';
    $mail->msgHTML('<p>test body</p>'); // 这里可以传完整的HTML内容
    $mail->AltBody = 'HTML messaging not supported';
    
    // 发送邮件
    $mail->send();
    echo 'Message sent!';
} catch (Exception $e) {
    // 捕获异常并输出错误信息
    echo "Mailer Error: {$mail->ErrorInfo}";
}

为什么之前的代码报错?

新版PHPMailer的核心类都在PHPMailer\PHPMailer命名空间下,你之前直接写new PHPMailer;,PHP会在全局命名空间找这个类,自然找不到。要么用use语句引入命名空间,要么写完整的类名:new \PHPMailer\PHPMailer\PHPMailer();

二、解答你的三个疑惑

1. 下载的压缩包为什么缺少GitHub页面的文件?

GitHub仓库里的内容包含了开发所需的所有文件:测试用例、文档、示例代码、CI配置文件等,但发布版压缩包(从Releases页面下载的)只保留了运行必需的核心文件(也就是src目录和LICENSE等),去掉了开发冗余内容。如果想要获取完整的仓库文件,你可以直接Clone仓库,或者在Releases页面下载「Source code」压缩包。

2. 为什么示例引用不存在的autoload.php?

autoload.php是Composer生成的自动加载文件,当你用Composer安装PHPMailer时,Composer会自动生成这个文件,它能自动加载所有需要的类文件,不用手动写一堆require_once。官方示例默认是给使用Composer的用户准备的,所以会引用这个文件,但它确实不在发布版压缩包里,因为它不是PHPMailer本身的文件。

3. 为什么旧版本有PHPMailerAutoload.php,现在没有了?

PHPMailer在6.0版本做了重大架构更新,移除了自带的PHPMailerAutoload.php,转而推荐使用Composer的自动加载机制。你2017年的视频对应的是6.0之前的旧版本,所以和现在的新版本结构差异很大。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:37