DEDECMS自定义表单发送到邮箱

2014年-05月-23日

自定义表单,由于其具有很强的灵活性,在织梦系统中经常用于留言、下单等等,而后台去查看留言或者订单就不是很方便,所以便有了发送表单信息到邮箱的需求,百度一下会发现这种文章不少,但是很少有真正能用的,或者是说不适合5.7的版本,之前道成也尝试过其他的方法,虽然有可以成功的,但是比较繁琐或者不稳定,甚至有的需要安装插件的,给网站带来安全隐患,自然是舍弃不用了。

要实现将自定义表单信息发送到邮箱,一般来说需要三个步骤:

1,配置smtp信息
这个可以在系统后台配置然后用变量调用,或者明文配置也可以。
一般推荐用后台配置方便修改



2,修改diy.php
文件位置/plus/diy.php,这个很常用的,熟悉dede的都知道
$query = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar)  VALUES (NULL, 0 $addvalue); ";
if($dsql->ExecuteNoneQuery($query))  
之间
插入以下代码【下面所有蓝色字体都是】

$addvalue_ary = explode(',', $addvalue);
//因为DEDE是将所有表单数据提交过来,所以这里需要分隔一下。
$addvar_ary = array(
0 => '客户地址',
1 => '客户姓名',
2 => '联系电话',
3 => '邮箱',
4 => '留言内容',
5 => '可以一直加N个',
);
$text = '';
foreach($addvar_ary as $key=>$value)
{
$text.=$value.': '.$addvalue_ary[$key].'<br>';
}
$mailmy = '收件邮箱地址,第二个邮箱地址,第三个邮箱地址';
$mailtitle = "收到的邮件的标题";
$mailbody = $text;
$headers = $cfg_adminemail;
$mailtype = 'HTML';
require_once(DEDEINC.'/mail.class.php');//注意这里要载入mail类
$smtp=new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
$smtp->debug = false;
$smtp->sendmail($mailmy,$cfg_webname ,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);

具体可以参考我之前修改过的一个diy.php文件

<?php
 
/**
 
 *
 
 * 自定义表单
 
 *
 
 * @version        $Id: diy.php 1 15:38 2010年7月8日Z tianya $
 
 * @package        DedeCMS.Site
 
 * @copyright      Copyright (c) 2007 - 2010, DesDev, Inc.
 
 * @license        http://help.dedecms.com/usersguide/license.html
 
 * @link           http://www.dedecms.com
 
 */
 
require_once(dirname(__FILE__)."/../include/common.inc.php");
require_once(DEDEINC.'/membermodel.cls.php');
 
 
$diyid = isset($diyid) && is_numeric($diyid) ? $diyid : 0;
 
$action = isset($action) && in_array($action, array('post', 'list', 'view')) ? $action : 'post';
 
$id = isset($id) && is_numeric($id) ? $id : 0;
 
 
 
if(empty($diyid))
 
{
 
    showMsg('非法操作!', 'javascript:;');
 
    exit();
 
}
 
 
 
require_once DEDEINC.'/diyform.cls.php';
 
$diy = new diyform($diyid);
 
 
 
/*----------------------------
 
function Post(){ }
 
---------------------------*/
 
if($action == 'post')
 
{
 
    if(empty($do))
 
    {
 
        $postform = $diy->getForm(true);
 
        include DEDEROOT."/templets/plus/{$diy->postTemplate}";
 
        exit();
 
    }
 
    elseif($do == 2)
 
    {
 
       //验证码验证
        $svali = GetCkVdValue();
         if(preg_match("/1/",$safe_gdopen)){
             if(strtolower($vdcode)!=$svali || $svali=='')
             {
                 ResetVdValue();
                 ShowMsg('验证码错误!', '-1');
                 exit();
             } 
         }
 
        $dede_fields = empty($dede_fields) ? '' : trim($dede_fields);
 
        $dede_fieldshash = empty($dede_fieldshash) ? '' : trim($dede_fieldshash);
 
        if(!empty($dede_fields))
 
        {
 
            if($dede_fieldshash != md5($dede_fields.$cfg_cookie_encode))
 
            {
 
                showMsg('数据校验不对,程序返回', '-1');
 
                exit();
 
            }
 
        }
 
        $diyform = $dsql->getOne("select * from dede_diyforms where diyid='$diyid' ");
 
        if(!is_array($diyform))
 
        {
 
            showmsg('自定义表单不存在', '-1');
 
            exit();
 
        }
 
 
 
        $addvar = $addvalue = '';
 
 
 
        if(!empty($dede_fields))
 
        {
 
            $fieldarr = explode(';', $dede_fields);
 
            if(is_array($fieldarr))
 
            {
 
                foreach($fieldarr as $field)
 
                {
 
                    if($field == '') continue;
 
                    $fieldinfo = explode(',', $field);
 
                    if($fieldinfo[1] == 'textdata')
 
                    {
 
                        ${$fieldinfo[0]} = FilterSearch(stripslashes(${$fieldinfo[0]}));
 
                        ${$fieldinfo[0]} = addslashes(${$fieldinfo[0]});
 
                    }
 
                    else
 
                    {
 
                        ${$fieldinfo[0]} = GetFieldValue(${$fieldinfo[0]}, $fieldinfo[1],0,'add','','diy', $fieldinfo[0]);
 
                    }
 
                    $addvar .= ', `'.$fieldinfo[0].'`';
 
                    $addvalue .= ", '".${$fieldinfo[0]}."'";
 
                }
 
            }
 
 
 
        }
 
 
 
        $query = "INSERT INTO `{$diy->table}` (`id`, `ifcheck` $addvar)  VALUES (NULL, 0 $addvalue); ";
 
 
 
 
 
 
 
$addvalue_ary = explode(',', $addvalue);
 
//因为DEDE是将所有表单数据提交过来,所以这里需要分隔一下。
 
$addvar_ary = array(
 
0 => '客户姓名',
 
1 => '联系电话',
 
2 => '邮箱',
 
3 => '留言内容',
 
);
 
 
 
$text = '';
 
foreach($addvar_ary as $key=>$value)
 
{
 
$text.=$value.': '.$addvalue_ary[$key].'<br>';
 
}
 
 
 
$mailmy = '1166545@qq.com';
 
$mailtitle = "道成网站留言";
 
$mailbody = $text;
 
$headers = $cfg_adminemail;
 
$mailtype = 'HTML';
 
require_once(DEDEINC.'/mail.class.php');//注意这里要载入mail类
 
$smtp = new smtp($cfg_smtp_server,$cfg_smtp_port,true,$cfg_smtp_usermail,$cfg_smtp_password);
 
$smtp->debug = false;
 
$smtp->sendmail($mailmy,$cfg_webname ,$cfg_smtp_usermail, $mailtitle, $mailbody, $mailtype);
 
 
 
 
 
        if($dsql->ExecuteNoneQuery($query))
 
        {
 
            $id = $dsql->GetLastID();
 
            if($diy->public == 2)
 
            {
 
                //diy.php?action=view&diyid={$diy->diyid}&id=$id
 
                $goto = "diy.php?action=list&diyid={$diy->diyid}";
 
                $bkmsg = '发布成功,现在转向表单列表页...';
 
            }
 
            else
 
            {
 
                $goto = !empty($cfg_cmspath) ? $cfg_cmspath : '/';
 
                $bkmsg = '发布成功,请等待管理员处理...';
 
            }
 
            showmsg($bkmsg, $goto);
 
        }
 
    }
 
}
 
/*----------------------------
 
function list(){ }
 
---------------------------*/
 
else if($action == 'list')
 
{
 
    if(empty($diy->public))
 
    {
 
        showMsg('后台关闭前台浏览', 'javascript:;');
 
        exit();
 
    }
 
    include_once DEDEINC.'/datalistcp.class.php';
 
    if($diy->public == 2)
 
        $query = "SELECT * FROM `{$diy->table}` ORDER BY id DESC";
 
    else
 
        $query = "SELECT * FROM `{$diy->table}` WHERE ifcheck=1 ORDER BY id DESC";
 
 
 
    $datalist = new DataListCP();
 
    $datalist->pageSize = 10;
 
    $datalist->SetParameter('action', 'list');
 
    $datalist->SetParameter('diyid', $diyid);
 
    $datalist->SetTemplate(DEDEINC."/../templets/plus/{$diy->listTemplate}");
 
    $datalist->SetSource($query);
 
    $fieldlist = $diy->getFieldList();
 
    $datalist->Display();
 
}
 
else if($action == 'view')
 
{
 
    if(empty($diy->public))
 
    {
 
        showMsg('后台关闭前台浏览' , 'javascript:;');
 
        exit();
 
    }
 
 
 
    if(empty($id))
 
    {
 
        showMsg('非法操作!未指定id', 'javascript:;');
 
        exit();
 
    }
 
    if($diy->public == 2)
 
    {
 
        $query = "SELECT * FROM {$diy->table} WHERE id='$id' ";
 
    }
 
    else
 
    {
 
        $query = "SELECT * FROM {$diy->table} WHERE id='$id' AND ifcheck=1";
 
    }
 
    $row = $dsql->GetOne($query);
 
 
 
    if(!is_array($row))
 
    {
 
        showmsg('你访问的记录不存在或未经审核', '-1');
 
        exit();
 
    }
 
 
 
    $fieldlist = $diy->getFieldList();
 
    include DEDEROOT."/templets/plus/{$diy->viewTemplate}";
 
}

此方式的好处是:邮件可以发送到指定的多个邮箱