前言
📧 PHPMailer 5.2 替换全流程
ThinkPHP 5.0 + FastAdmin 邮件修复指南
适用:PHP 7.4、无 Composer、即拷即用
一、为什么要替换?
- Tx\Mailer 握手失败:
SMTP Server did not respond with anything I recognized - 后台测试、前台忘记密码 全部无法发信
- PHPMailer 5.2 原生 SMTP,零依赖,5 分钟搞定
二、安装 PHPMailer 5.2(无 Composer)
bash
# 1. 进入项目根目录
cd /www/wwwroot/你的项目根目录
# 2. 下载 5.2.28 完整包
wget https://github.com/PHPMailer/PHPMailer/archive/refs/tags/v5.2.28.tar.gz
# 3. 解压并重命名
tar -xzf v5.2.28.tar.gz && mv PHPMailer-5.2.28 PHPMailer && rm v5.2.28.tar.gz
# 4. 修正权限
chown -R www:www PHPMailer
三、验证文件存在
bash
# 1. 三个文件是否都有
ls PHPMailer/class.phpmailer.php
ls PHPMailer/class.smtp.php
ls PHPMailer/PHPMailerAutoload.php
四、替换前台「忘记密码」发送逻辑
文件:application/index/controller/User.php
方法:forgot() 内 保存 token 后 的邮件块
① 原代码(Tx\Mailer)
$email_obj = new Email();
$result = $email_obj
->to($email)
->subject($subject)
->message($message)
->send();
② 替换成 PHPMailer 5.2 读库版
// 从数据库读取邮件配置
$config = \think\Config::get('site');
$host = $config['mail_smtp_host'] ?? 'smtp.qq.com';
$port = $config['mail_smtp_port'] ?? 465;
$user = $config['mail_smtp_user'] ?? '';
$pass = $config['mail_smtp_pass'] ?? '';
$from = $config['mail_from'] ?? '';
$verify = $config['mail_verify_type'] ?? 'ssl';
$secureMap = ['' => '', 1 => 'tls', 2 => 'ssl'];
$secure = $secureMap[$verify] ?? 'ssl';
// 屏蔽废弃提示
error_reporting(E_ALL & ~E_DEPRECATED);
require_once APP_PATH . '../PHPMailer/PHPMailerAutoload.php';
$mail = new \PHPMailer(true);
// PHPMailer 5.2 发送
require_once APP_PATH . '../PHPMailer/PHPMailerAutoload.php';
$mail = new \PHPMailer(true);
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host = $host;
$mail->SMTPAuth = true;
$mail->Username = $user;
$mail->Password = $pass;
$mail->SMTPSecure = $secure;
$mail->Port = $port;
$mail->SetFrom($from, $config['mail_smtp_user'] ?? '系统邮件');
$mail->AddAddress($email);
$mail->Subject = $subject;
$mail->Body = $message;
try {
$mail->Send();
$result = true;
} catch (Exception $e) {
$result = false;
}
五、替换后台「发送测试邮件」按钮逻辑
文件:application/admin/controller/general/Config.php
方法:emailtest()
① 原代码(Tx\Mailer)
$email = new Email;
$result = $email
->to($receiver)
->subject(...)
->message(...)
->send();
② 替换成 PHPMailer 5.2 读库版
// 从数据库读取邮件配置
$site = \think\Config::get('site');
$host = $site['mail_smtp_host'] ?? 'smtp.qq.com';
$port = $site['mail_smtp_port'] ?? 465;
$user = $site['mail_smtp_user'] ?? '';
$pass = $site['mail_smtp_pass'] ?? '';
$from = $site['mail_from'] ?? '';
$verify = $site['mail_verify_type'] ?? 'ssl';
$secureMap = ['' => '', 1 => 'tls', 2 => 'ssl'];
$secure = $secureMap[$verify] ?? 'ssl';
// 屏蔽废弃提示
error_reporting(E_ALL & ~E_DEPRECATED);
require_once APP_PATH . '../PHPMailer/PHPMailerAutoload.php';
$mail = new \PHPMailer(true);
// PHPMailer 5.2 发送
require_once APP_PATH . '../PHPMailer/PHPMailerAutoload.php';
$mail = new \PHPMailer(true);
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host = $host;
$mail->SMTPAuth = true;
$mail->Username = $user;
$mail->Password = $pass;
$mail->SMTPSecure = $secure;
$mail->Port = $port;
$mail->SetFrom($from, $site['mail_smtp_user'] ?? '系统邮件');
$mail->AddAddress($receiver);
$mail->Subject = __("This is a test mail", $site['name']);
$mail->Body = '<div style="min-height:550px; padding: 100px 55px 200px;">' . __('This is a test mail content', $site['name']) . '</div>';
try {
$mail->Send();
$this->success(__('Test mail sent successfully'));
} catch (Exception $e) {
$this->error(__('Failed to send test mail') . ':' . $mail->ErrorInfo);
}
六、后台配置对照(一次性填对)
SMTP服务器 smtp.qq.com
SMTP端口 465
SMTP用户名 你的邮箱地址
SMTP密码 16位授权码(不是QQ密码)
SMTP验证方式 SSL
发件人邮箱 你的邮箱地址
测试接收者邮箱 你自己的接收测试用
七、清缓存 & 全流程验证
rm -rf /www/wwwroot/你项目目录/runtime/temp/*
八、(可选)切换登录模板为 login2.html
① 修改控制器模板调用
文件:application/index/controller/User.php
方法:login() 末尾:
// 指定用 login2.html 模板(第210行左右)
![图片[1]-修复主站后台发送测试邮件报错和前台忘记密码功能丢失问题-博客喵](https://bkm.mistora.cc/wp-content/uploads/2025/11/20251115141448422-image-1024x180.png)
return $this->view->fetch(‘login2’);
② 确保 login2.html 链接正确
检查 application/index/view/user/login2.html 内:
<a href=”{:url(‘user/forgot’)}”>忘记密码</a>
③ 清缓存 & 验证
rm -rf /www/wwwroot/你的证书站/runtime/temp/*
后续维护小贴士
只改后台「邮件配置」即可,代码永不需再动;
升级 PHP 8.x 后可随时 composer require phpmailer/phpmailer:^6 一键升官方最新版;
若换邮箱服务商,只需改 SMTP服务器/端口/用户名/密码 四项即可。
🎉 全面修复完成!
前台、后台邮件发送均正常 → 任务达成 ✅
🎉 全面修复完成!
前台 login2 + 后台测试 + 忘记密码流程 全部正常 → 任务达成 ✅
效果展示
![图片[2]-修复主站后台发送测试邮件报错和前台忘记密码功能丢失问题-博客喵](https://bkm.mistora.cc/wp-content/uploads/2025/11/20251115011735225-6ceb74dc80d1dc4f74b8200191c5e365_720-1024x585.png)
![图片[3]-修复主站后台发送测试邮件报错和前台忘记密码功能丢失问题-博客喵](https://bkm.mistora.cc/wp-content/uploads/2025/11/20251115011740804-9294d98c13ce35b7ad38cb61ced97776-1024x539.png)
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!













![表情[dabing]-博客喵](https://bkm.mistora.cc/wp-content/themes/zibll/img/smilies/dabing.gif)
![表情[ciya]-博客喵](https://bkm.mistora.cc/wp-content/themes/zibll/img/smilies/ciya.gif)































暂无评论内容