直接修改 member/reg_new.php 文件(核心文件修改法)
这是最直接的方法,但缺点是下次升级 DedeCMS 时,这些修改可能会被覆盖。

(图片来源网络,侵删)
操作步骤:
-
准备工作
-
确认你的网站已开启并配置好邮件发送功能,在 DedeCMS 后台,进入【系统】-> 【系统基本参数】-> 【核心设置】,检查并配置以下几项:
cfg_smtp_server: SMTP 服务器地址 (smtp.qq.com)cfg_smtp_port: SMTP 服务器端口 (465或587)cfg_smtp_user: SMTP 发件箱用户名 (通常是完整的邮箱地址)cfg_smtp_pass: SMTP 发件箱授权码 (注意:很多邮箱服务商(如QQ, 163)需要使用“授权码”而不是登录密码)cfg_webname: 你的网站名称 (会作为发件人名称)cfg_adminemail: 管理员邮箱 (将接收新会员注册的提醒邮件)
-
备份文件:备份
/member/reg_new.php文件。
-
-
编辑
reg_new.php文件
(图片来源网络,侵删)- 使用 FTP 或其他文件管理工具,打开
/member/reg_new.php文件。 - 找到用户信息成功插入数据库的位置,通常在文件的末尾附近,你能看到类似
ShowMsg('注册成功!', ...);的代码。
- 使用 FTP 或其他文件管理工具,打开
-
添加发送邮件的代码
- 在
ShowMsg('注册成功!', ...);这行代码之前,插入以下 PHP 代码。
// ===================================================== // 新会员注册成功后,发送邮件提醒管理员 // ===================================================== $member_name = $username; // 新注册的用户名 $member_email = $email; // 新注册的邮箱 $reg_time = date("Y-m-d H:i:s"); // 注册时间 // 邮件主题 $subject = "【".$cfg_webname."】有新会员注册提醒"; // 邮件正文 $message = "网站有新会员注册,详细信息如下:\n\n"; $message .= "网站名称:".$cfg_webname."\n"; $message .= "新会员用户名:".$member_name."\n"; $message .= "新会员邮箱:".$member_email."\n"; $message .= "注册时间:".$reg_time."\n\n"; $message .= "请及时登录后台进行审核和管理,\n"; $message .= "-- \n"; $message .= $cfg_webname." 管理系统"; // 发送邮件 // @符号是为了屏蔽函数可能产生的警告信息,你可以先去掉@调试 if(@mail($cfg_adminemail, $subject, $message, "From:".$cfg_smtp_user."\r\nReply-To:".$cfg_smtp_user)){ // 邮件发送成功,可以在这里记录日志(可选) // insert_log('admin', '新会员注册提醒邮件发送成功: '.$member_name); } else { // 邮件发送失败,可以在这里记录日志(可选) // insert_log('admin', '新会员注册提醒邮件发送失败: '.$member_name); } // ===================================================== - 在
-
保存并测试
- 保存修改后的
reg_new.php文件。 - 清除浏览器缓存和 DedeCMS 的数据缓存(后台有清除缓存选项)。
- 前台使用一个新邮箱进行注册,注册成功后,检查你之前配置的管理员邮箱是否收到了提醒邮件。
- 保存修改后的
使用DedeCMS的钩子机制(推荐,更安全)
这种方法不修改核心文件,而是通过 DedeCMS 的 plus 目录创建一个插件来触发邮件发送,这是更规范的二次开发方式,升级时不会被覆盖。
操作步骤:
-
准备工作
(图片来源网络,侵删)- 同方法一,确保网站邮件功能已正确配置。
- 备份文件:备份
/member/reg_new.php文件。
-
创建触发文件
- 在 DedeCMS 根目录下创建一个名为
plus的文件夹(如果不存在的话)。 - 在
plus文件夹内,创建一个新文件,send_admin_mail.php。
- 在 DedeCMS 根目录下创建一个名为
-
编写
send_admin_mail.php的内容- 将以下代码复制到
send_admin_mail.php文件中并保存。
<?php /** * 新会员注册成功后,发送邮件提醒管理员 * 此文件由 member/reg_new.php 调用 */ // 引入全局配置 require_once(dirname(__FILE__)."/../include/config_global.php"); require_once(DEDEINC."/dedemail.class.php"); // 接收传递过来的参数 $member_name = isset($username) ? trim($username) : ''; $member_email = isset($email) ? trim($email) : ''; // 参数校验 if (empty($member_name) || empty($member_email)) { exit('参数错误'); } // 获取配置 $cfg_webname = $cfg_webname; $cfg_adminemail = $cfg_adminemail; // 邮件主题 $subject = "【".$cfg_webname."】有新会员注册提醒"; // 邮件正文 $message = "网站有新会员注册,详细信息如下:\n\n"; $message .= "网站名称:".$cfg_webname."\n"; $message .= "新会员用户名:".$member_name."\n"; $message .= "新会员邮箱:".$member_email."\n"; $message .= "注册时间:".date("Y-m-d H:i:s")."\n\n"; $message .= "请及时登录后台进行审核和管理,\n"; $message .= "-- \n"; $message .= $cfg_webname." 管理系统"; // 使用DedeCMS自带的邮件类发送,更稳定 $dm = new DedeMailer(); $dm->IsHTML(false); // 设置为纯文本邮件 $dm->ClearAddresses(); // 清除地址列表 $dm->AddAddress($cfg_adminemail, "管理员"); $dm->FromName = $cfg_webname; $dm->From = $cfg_smtp_user; $dm->Subject = $subject; $dm->Body = $message; if ($dm->Send()) { // 发送成功,可以记录日志 // $msg = "新会员注册提醒邮件发送成功: {$member_name}"; // insert_log('admin', $msg); } else { // 发送失败,可以记录日志 // $msg = "新会员注册提醒邮件发送失败: {$member_name}"; // insert_log('admin', $msg); } $dm->SmtpClose(); ?> - 将以下代码复制到
-
修改
member/reg_new.php文件- 打开
/member/reg_new.php文件。 - 找到
ShowMsg('注册成功!', ...);这行代码。 - 在这行代码之前,添加以下一行代码来调用我们刚刚创建的脚本:
// 调用外部脚本发送管理员提醒邮件 require_once(dirname(__FILE__)."/../plus/send_admin_mail.php"); // 注意:如果plus目录和member目录在同一级,路径是 "../plus/send_admin_mail.php" // 如果你的网站结构不同,请根据实际情况调整路径
- 打开
-
保存并测试
- 保存修改后的
reg_new.php文件。 - 清除缓存。
- 前台使用一个新邮箱进行注册,检查管理员邮箱是否收到提醒邮件。
- 保存修改后的
故障排查
如果邮件没有发送成功,请按以下步骤排查:
- 检查垃圾邮件箱:很多邮件系统会把这类提醒邮件误判为垃圾邮件。
- 检查邮件服务器配置:再次确认后台【系统基本参数】中的 SMTP 配置是否正确,特别是
cfg_smtp_pass是否为授权码。 - 测试邮件发送:在后台【系统】-> [系统基本参数] -> [核心设置] 底部,有一个“测试邮件发送”功能,可以快速测试你的邮件配置是否正确。
- 检查服务器环境:确认你的服务器是否支持
mail()函数或SMTP协议,虚拟主机通常都支持,但部分VPS或云服务器可能需要额外配置。 - 查看错误日志:在方法一的代码中,我已经加入了注释掉的
insert_log函数,你可以取消注释,将发送邮件的成功或失败信息记录到 DedeCMS 的后台日志中,方便排查问题,日志路径通常是/data/adminlog/。
希望这个详细的教程能帮助你解决问题!
