dede自定义表单邮件

99ANYc3cd6
预计阅读时长 19 分钟
位置: 首页 DEDE建站 正文
  1. 修改 /plus/diy.php 文件:这是处理表单提交的核心文件,我们需要在这里加入发送邮件的代码。
  2. 确保网站服务器支持邮件发送:这是邮件功能能否实现的基础。

第一步:修改 /plus/diy.php 文件

这是最关键的一步,请务必在修改前备份原始的 diy.php 文件,以防出错。

找到并定位代码

打开 /plus/diy.php 文件,找到以下代码段(通常在文件末尾附近):

//更新到表dede_diyforms
$inquery = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, $diy->docheck $addvalue);";
if($dsql->ExecuteNoneQuery($inquery))
{
    $id = $dsql->GetLastID();
    if($diy->public == 2)
    {
        //diy.php?action=post&diyid=ID&do=submit
        $goto = "diy.php?action=list&diyid={$diy->diyid}";
        $bkmsg = '发布成功,现在转向表单列表页...';
    }
    else
    {
        $goto = $dtp->GetMakeItem($diy->backmsg, -1);
        $bkmsg = '发布成功,请进行后续操作。';
    }
    showmsg($bkmsg, $goto);
}

这段代码是成功将数据插入数据库后执行的,我们要做的就是在这段代码之前,插入发送邮件的逻辑。

插入邮件发送代码

在上述代码块之前,添加如下 PHP 代码,这段代码会收集表单数据,并调用 DedeCMS 自带的邮件发送函数。

// ---------------------------- 开始添加邮件通知代码 ----------------------------
// 获取管理员邮箱(在后台自定义表单中设置的“发布邮箱”)
$email_to = $diy->adminemail; 
// 如果设置了接收邮箱,则发送邮件
if(!empty($email_to))
{
    // 邮件主题
    $email_subject = "您有来自网站【". $cfg_webname ."】的新表单提交";
    // 邮件内容 - 开始构建
    $email_body = "网站名称:". $cfg_webname ."\r\n";
    $email_body .= "提交时间:".strftime("%Y-%m-%d %H:%M:%S", time())."\r\n";
    $email_body .= "提交内容:\r\n";
    // 循环获取表单中的每一个字段
    foreach($diy->fields as $field=>$fieldinfo)
    {
        // 获取字段名称和值
        $field_name = $fieldinfo['name'];
        $field_value = ${$field}; // 注意这里的变量使用方式
        // 将内容添加到邮件正文中
        $email_body .= "------------------------\r\n";
        $email_body .= "字段名称:". $field_name ."\r\n";
        $email_body .= "字段内容:". $field_value ."\r\n";
    }
    // 调用DedeCMS自带的邮件发送函数
    // $cfg_sendmail_blr 是发件人邮箱,通常在系统基本参数中设置
    $email_from = $cfg_webname ."<". $cfg_sendmail_blr .">";
    // 发送邮件
    $mailtitle = $email_subject;
    $mailbody = $email_body;
    $mailtype = 'TEXT'; // 邮件格式,TEXT为纯文本,HTML为HTML格式
    $mailto = $email_to;
    // 调用邮件发送函数
    if($mailtype=='HTML')
    {
        $mailbody = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'><div style='font-size:14px;line-height:1.8'>".$mailbody."</div>";
    }
    $sm = new smtp();
    $smtparr = explode(',', $cfg_smtp_server);
    $sm->set_server($smtparr[0], $cfg_smtp_port, true, $cfg_smtp_usermail, $cfg_smtp_password);
    $sm->mail_from($cfg_smtp_usermail, $cfg_webname);
    $sm->mail_to($mailto);
    $sm->mail_subject($mailtitle);
    $sm->mail_body($mailbody);
    $sm->sendmail();
    // ---------------------------- 邮件通知代码结束 ----------------------------
}
// 继续执行原有的代码(将数据插入数据库等)
// 更新到表dede_diyforms
$inquery = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar) VALUES (NULL, $diy->docheck $addvalue);";
// ... 后面的代码保持不变 ...

代码解释:

  • $diy->adminemail: 这是 DedeCMS 自定义表单自带的一个字段,你可以在后台创建表单时,在“高级选项”里填写“发布邮箱”,我们直接获取这个值作为收件人。
  • $cfg_webname: 网站名称,从系统配置中读取,用于邮件主题。
  • foreach($diy->fields as $field=>$fieldinfo): 这个循环会遍历表单中的所有字段,这样无论你增加或减少表单字段,邮件内容都能自动包含所有提交的数据,非常灵活。
  • ${$field}: 这是 PHP 的“可变变量”写法,用于动态获取表单提交的值,如果表单有一个名为 name 的字段,${$field} 就会获取 $name 的值。
  • new smtp(): 这是 DedeCMS 自带的邮件发送类,我们直接实例化它。
  • $cfg_smtp_*: 这些是 DedeCMS 在后台“系统基本参数” -> “核心设置” 中配置的 SMTP 邮件服务器参数,如果你的服务器不支持 SMTP 方式发送邮件,邮件功能将无法实现。

第二步:确保服务器支持邮件发送

这是邮件功能能否生效的前提,DedeCMS 支持两种邮件发送方式:

使用 SMTP 推荐方式

这是最稳定、最可靠的方式,尤其适用于虚拟主机,你需要准备一个支持 SMTP 的邮箱账号(如 163、QQ、Gmail 等)。

  1. 登录你的 DedeCMS 后台。

  2. 进入 【系统】->【系统基本参数】->【核心设置】

  3. 找到以下几项并填写正确信息:

    • 网站发信邮箱:填写你准备好的邮箱地址,如 your_email@163.com
    • SMTP服务器:填写对应的 SMTP 地址,如 smtp.163.com
    • SMTP服务器的端口:通常是 25465(SSL加密),具体请参考你的邮箱服务商说明。
    • SMTP服务器用户名:填写你的邮箱地址,如 your_email@163.com
    • SMTP服务器密码不是你的邮箱登录密码,而是邮箱服务商提供的“授权码”或“独立密码”,你需要在邮箱设置中开启 SMTP 服务并获取此授权码。
  4. 保存设置。

使用 PHP 的 mail() 函数

这种方式依赖于服务器环境的配置,很多虚拟主机出于安全考虑会禁用此函数,或者发送成功率不高。

  1. 登录你的 DedeCMS 后台。
  2. 进入 【系统】->【系统基本参数】->【核心设置】
  3. 确保 网站发信邮箱 填写正确。
  4. 【SMTP服务器】相关的项目可以留空
  5. 保存设置。

第三步:后台配置自定义表单

  1. 在后台创建你的自定义表单(留言反馈、在线报名等)。
  2. 在表单的字段管理中,添加你需要的字段(如:姓名、电话、邮箱、留言内容等)。
  3. 关键一步:在表单的 【高级选项】 中,找到 【发布邮箱】 这一项,填入你希望接收邮件的管理员邮箱地址,这个地址就是我们第一步代码中 $email_to 的来源。
  4. 生成表单代码,并嵌入到你的前台页面中。

常见问题排查 (FAQ)

  1. Q: 为什么我提交了表单,但收不到邮件?

    • A: 请按以下顺序检查:
      1. 检查垃圾邮件箱:邮件可能被误判为垃圾邮件。
      2. 检查 /plus/diy.php 修改:确认代码是否正确添加,且没有语法错误。
      3. 检查后台邮箱设置:确认【系统基本参数】中的发信邮箱和 SMTP 信息是否正确,特别是SMTP密码,一定要用授权码
      4. 检查表单设置:确认自定义表单的【发布邮箱】已经填写。
      5. 服务器环境:联系你的主机商,确认服务器是否开启了 mail() 函数或 SMTP 服务。
  2. Q: 邮件内容是乱码怎么办?

    • A: 主要是编码问题。
      1. 确保你的网站和数据库都是 UTF-8 编码。
      2. 在构建 $email_body 时,可以在开头指定编码,如 $email_body = "<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>".$email_body; (如果邮件格式是HTML)。
      3. 修改邮件发送函数,设置正确的字符集 $sm->mail_charset = 'utf-8'; (smtp 类支持此属性)。
  3. Q: 我想给用户也发一封确认邮件怎么办?

    • A: 这个需求稍微复杂一些,你需要在 diy.php 中增加一个条件判断,如果用户填写了邮箱,就给他发一封确认信,你需要再写一段 $sm->sendmail() 的代码,收件人改为用户提交的邮箱地址,邮件内容改为感谢或确认信息。

通过以上步骤,你就可以成功地为 DedeCMS 自定义表单添加邮件通知功能了,祝你操作顺利!

-- 展开阅读全文 --
头像
dede自定义表单如何实现跳转?
« 上一篇 03-30
贷款网站织梦模板源码安全可靠吗?
下一篇 » 03-30

相关文章

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

目录[+]