下面我将为您提供详细的步骤和代码,分为修改模板文件(推荐)和修改PHP文件(更底层)两种方式。

(图片来源网络,侵删)
⚠️ 重要前提:请先检查系统配置
在修改任何文件之前,请务必登录您的DedeCMS后台,检查系统是否已正确配置SMTP邮件信息,这是邮件发送成功的基础。
- 登录DedeCMS后台。
- 进入 【系统】-> 【系统基本参数】-> 【核心设置】。
- 找到以下几个关键配置项并填写正确信息:
- 网站发信EMAIL: 填写您要用来发送邮件的邮箱地址(
noreply@yourdomain.com)。 - SMTP服务器: 您的邮箱服务商提供的SMTP服务器地址(
smtp.qq.com)。 - SMTP服务端口: 通常为
25、465(SSL) 或587,推荐使用465并开启SSL。 - SMTP用户名: 您的邮箱地址(
noreply@yourdomain.com)。 - SMTP密码: 不是您的邮箱登录密码,而是邮箱服务商提供的授权码(在邮箱设置中开启SMTP服务后获取)。
- 网站发信EMAIL: 填写您要用来发送邮件的邮箱地址(
修改留言板模板文件(最常用、最安全)
这种方法是通过修改留言板模板,在用户提交留言后,调用一个JS函数来发送邮件,它不直接修改核心PHP文件,因此升级DedeCMS时不易被覆盖。
步骤1:找到留言板模板文件
您的留言板模板通常位于 /templets/ 目录下的一个文件夹里,具体路径取决于您使用的模板,常见的路径是:
/templets/default/(默认模板)/templets/您的模板名称/
在相应目录下找到留言板模板文件,通常是 guestbook.htm。

(图片来源网络,侵删)
步骤2:修改 guestbook.htm 文件
- 打开
guestbook.htm文件。 - 找到留言提交表单,通常是一个
<form>标签,里面包含dedepostform这个类名。 - 修改表单的
onsubmit事件,在表单提交前触发邮件发送函数。
修改前代码示例:
<form name="myform" action="/plus/guestbook.php" method="post" onSubmit="return checkPost()">
<!-- ... 表单内容 ... -->
<button type="submit" name="submit">提交留言</button>
</form>
修改后代码示例:
<form name="myform" action="/plus/guestbook.php" method="post" onSubmit="return checkPost(); sendMailToAdmin();">
<!-- ... 表单内容 ... -->
<button type="submit" name="submit">提交留言</button>
</form>
关键点:我们在 onSubmit 事件中增加了 sendMailToAdmin();。
步骤3:添加邮件发送的JavaScript代码
在 guestbook.htm 文件的 <head> 标签内,或者页面底部的 <script> 标签内,添加以下JavaScript代码:

(图片来源网络,侵删)
<script type="text/javascript">
function sendMailToAdmin() {
// 1. 获取表单中的用户名、留言内容等信息
// 注意:这里的字段名(如 'uname', 'msg')需要与您表单中的input name属性一致。
var uname = document.myform.uname.value;
var msg = document.myform.msg.value;
var title = "来自网站【<?php echo $cfg_webname; ?>】的新留言";
// 2. 构建邮件内容
var content = "您好,网站收到了一条新留言,\n\n";
content += "留言人:" + uname + "\n";
content += "留言内容:" + msg + "\n\n";
content += "请及时登录后台查看。";
// 3. 调用DedeCMS自带的邮件发送函数
// 使用 window.location.href 模拟一个GET请求,触发邮件发送
// /plus/mail.php 是织梦自带的邮件处理脚本
// mailTo: 收件人邮箱
// mailSubject: 邮件主题
// mailBody: 邮件正文
var mailUrl = "/plus/mail.php?mailto=<?php echo $cfg_adminemail; ?>&mailSubject=" + encodeURIComponent(title) + "&mailBody=" + encodeURIComponent(content);
// 使用新窗口打开,不干扰当前页面
window.open(mailUrl, 'sendMail', 'width=600,height=400,scrollbars=yes,status=yes');
// 4. 返回false,阻止表单的默认提交行为,让上面的window.open执行
// 注意:因为我们在onSubmit里已经调用了sendMailToAdmin,并且表单action会继续执行,
// 所以这里通常不需要返回false,但为了确保邮件发送逻辑清晰,可以保留。
// 如果希望邮件发送后才提交表单,逻辑会更复杂,这里采用先发送邮件,再让表单正常提交。
return true;
}
</script>
代码解释:
<?php echo $cfg_webname; ?>: 输出网站名称,使用PHP代码确保能正确获取。<?php echo $cfg_adminemail; ?>: 输出后台配置的管理员邮箱,作为收件人。encodeURIComponent(): 对邮件主题和内容进行URL编码,防止特殊字符导致请求失败。window.open(): 打开一个新的浏览器窗口来执行邮件发送,这是最简单的方式,用户可能会看到一个短暂的空白窗口然后关闭。/plus/mail.php: 这是DedeCMS内置的一个用于发送测试邮件或简单邮件的脚本,我们利用它来触发邮件发送功能。
修改PHP核心文件(功能更强,但升级可能失效)
这种方法直接修改处理留言的PHP文件,可以实现更无缝的体验,但直接修改核心文件在系统升级时可能会被覆盖。
步骤1:找到留言处理文件
该文件位于 /plus/guestbook.php。
步骤2:修改 guestbook.php 文件
- 打开
/plus/guestbook.php文件。 - 找到留言成功处理的位置,通常在文件末尾,在
ShowMsg("留言成功,请等待管理员审核!", "-1");这行代码之前。 - 在这行代码之前,插入发送邮件的PHP代码。
修改前代码片段(在文件末尾):
// ... 其他代码 ...
if($dopost == 'send')
{
// ... 留言入库逻辑 ...
ShowMsg("留言成功,请等待管理员审核!", "-1");
exit();
}
修改后代码片段:
// ... 其他代码 ...
if($dopost == 'send')
{
// ... 留言入库逻辑 ...
// 在这里添加发送邮件的代码
$mailtitle = "来自网站【".$cfg_webname."】的新留言通知";
// 从表单获取数据,注意字段名
$uname = $_POST['uname'];
$msg = $_POST['msg'];
$mailbody = "网站收到了一条新留言,详情如下:\n\n";
$mailbody .= "留言人:" . $uname . "\n";
$mailbody .= "留言内容:" . $msg . "\n\n";
$mailbody .= "请登录网站后台【留言管理】中查看和处理。";
// 调用DedeCMS的邮件发送函数
$cfg_sendmail_befor = 'noreply@yourdomain.com'; // 可选:设置发件人
$cfg_sendmail_after = '您的网站名称'; // 可选:设置发件人名称
// 发送邮件
if($mailbody){
$mailbody = htmlspecialchars($mailbody);
$mailtitle = htmlspecialchars($mailtitle);
$email = $cfg_adminemail; // 收件人邮箱
$sendmail = new SendMail();
$sendmail->SetTo($email);
$sendmail->SetFrom($cfg_webname.' <'.$cfg_sendmail_befor.'>');
$sendmail->SetSubject($mailtitle);
$sendmail->SetBody($mailbody);
if($sendmail->send()){
// 邮件发送成功,可以记录日志或什么都不做
} else {
// 邮件发送失败,可以记录日志或显示错误
// ShowMsg("留言成功,但邮件发送失败!", "-1");
// exit();
}
}
ShowMsg("留言成功,请等待管理员审核!", "-1");
exit();
}
代码解释:
- 我们使用了DedeCMS内置的
SendMail类来发送邮件,这是更标准的方式。 $cfg_adminemail: 从系统配置中获取管理员邮箱作为收件人。-
$mailbody可以根据需要格式化得更丰富。 - 这段代码会在留言成功提交并写入数据库后立即执行,用户不会察觉到邮件发送的过程,体验更流畅。
总结与推荐
| 特性 | 方法一 (修改模板JS) | 方法二 (修改PHP) |
|---|---|---|
| 优点 | 安全,不修改核心文件,升级不易丢失。 | 体验好,无感知发送,功能强大。 |
| 缺点 | 用户体验稍差(可能弹出窗口),依赖/plus/mail.php脚本。 |
升级DedeCMS时可能被覆盖,需要重新修改。 |
| 推荐场景 | 对技术不熟悉,希望简单实现,且不介意轻微弹窗的用户。 | 追求完美用户体验,网站不常升级,有一定开发能力的用户。 |
对于大多数用户,我强烈推荐使用【方法一】,因为它最安全、最简单,且能满足基本需求,如果您的网站对用户体验要求极高,可以考虑【方法二】,但请务必备份好您修改的文件。
