dede留言如何发送到邮箱?

99ANYc3cd6
预计阅读时长 21 分钟
位置: 首页 DEDE建站 正文

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

dede留言发送到邮箱
(图片来源网络,侵删)

⚠️ 重要前提:请先检查系统配置

在修改任何文件之前,请务必登录您的DedeCMS后台,检查系统是否已正确配置SMTP邮件信息,这是邮件发送成功的基础。

  1. 登录DedeCMS后台。
  2. 进入 【系统】-> 【系统基本参数】-> 【核心设置】
  3. 找到以下几个关键配置项并填写正确信息:
    • 网站发信EMAIL: 填写您要用来发送邮件的邮箱地址(noreply@yourdomain.com)。
    • SMTP服务器: 您的邮箱服务商提供的SMTP服务器地址(smtp.qq.com)。
    • SMTP服务端口: 通常为 25465 (SSL) 或 587,推荐使用 465 并开启SSL。
    • SMTP用户名: 您的邮箱地址(noreply@yourdomain.com)。
    • SMTP密码: 不是您的邮箱登录密码,而是邮箱服务商提供的授权码(在邮箱设置中开启SMTP服务后获取)。

修改留言板模板文件(最常用、最安全)

这种方法是通过修改留言板模板,在用户提交留言后,调用一个JS函数来发送邮件,它不直接修改核心PHP文件,因此升级DedeCMS时不易被覆盖。

步骤1:找到留言板模板文件

您的留言板模板通常位于 /templets/ 目录下的一个文件夹里,具体路径取决于您使用的模板,常见的路径是:

  • /templets/default/ (默认模板)
  • /templets/您的模板名称/

在相应目录下找到留言板模板文件,通常是 guestbook.htm

dede留言发送到邮箱
(图片来源网络,侵删)

步骤2:修改 guestbook.htm 文件

  1. 打开 guestbook.htm 文件
  2. 找到留言提交表单,通常是一个 <form> 标签,里面包含 dedepostform 这个类名。
  3. 修改表单的 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代码:

dede留言发送到邮箱
(图片来源网络,侵删)
<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 文件

  1. 打开 /plus/guestbook.php 文件
  2. 找到留言成功处理的位置,通常在文件末尾,在 ShowMsg("留言成功,请等待管理员审核!", "-1"); 这行代码之前。
  3. 在这行代码之前,插入发送邮件的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时可能被覆盖,需要重新修改。
推荐场景 对技术不熟悉,希望简单实现,且不介意轻微弹窗的用户。 追求完美用户体验,网站不常升级,有一定开发能力的用户。

对于大多数用户,我强烈推荐使用【方法一】,因为它最安全、最简单,且能满足基本需求,如果您的网站对用户体验要求极高,可以考虑【方法二】,但请务必备份好您修改的文件。

-- 展开阅读全文 --
头像
C语言count是什么意思?
« 上一篇 今天
dede列表页如何实现持续加载?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码

目录[+]