1. 程式人生 > >DedeCMS實現自定義表單提交後傳送指定郵箱的方法

DedeCMS實現自定義表單提交後傳送指定郵箱的方法

連結: https://pan.baidu.com/s/1t7F8eah3Bw-97jsKNqiQQg 提取碼: gs6j 

一、登陸QQ郵箱——設定——賬戶,找到POP3/IMAP/SMTP,開啟,現在的郵箱開啟POP3/SMTP都要授權碼,記下你的授權碼,等一下是作為密碼使用的

二、登陸網站後臺——系統——基本引數設定——核心設定,對比內容根據自己的郵箱填寫完整:

 

郵箱和後臺都OK後,我們開始用上phpmailer。

PHPMailer需PHP的socket擴充套件支援,而PHPMailer連結qq域名郵箱時需要ssl加密方式,固php還得openssl的支援,可以檢視phpinfo,如下兩項均存在則可以使用,其中openssl版本號之類不用管;許多虛擬主機中的php是不支援openssl擴充套件的,那你可能就悲劇了。

                            

我只儲存 了以下的幾個檔案:

class.phpmailer.php、class.phpmaileroauth.php、class.pop3.php、 class.smtp.php、PHPMailerAutoload.php

連結: https://pan.baidu.com/s/1t7F8eah3Bw-97jsKNqiQQg 提取碼: gs6j 

把這5個php檔案放到你dedecms程式plus資料夾下:

三、最後一步,開啟/plus/diy.php,找到程式碼(大概在第93行):

$id = $dsql->GetLastID();

在它的前面一行加入程式碼:

//郵件傳送開始
$fieldlist = $diy->getFieldList();
$addvalue_ary1 = explode(',', $addvalue);
$addvalue_ary = array_filter($addvalue_ary1);
$i = 1;
foreach($fieldlist as $field=>$fielddata)
{
    $emailbody .= $fielddata[0].':'.$addvalue_ary[$i].'<br/>';   
    $i ++;
}
global $cfg_smtp_server, $cfg_adminemail, $cfg_smtp_port, $cfg_smtp_usermail, $cfg_smtp_password, $cfg_webname, $cfg_basehost, $cfg_smtp_user;


//引入PHPMailer的核心檔案 使用require_once包含避免出現PHPMailer類重複定義的警告
require_once("class.phpmailer.php");
require_once("class.smtp.php");
//例項化PHPMailer核心類
$mail = new PHPMailer();

//是否啟用smtp的debug進行除錯 開發環境建議開啟 生產環境註釋掉即可 預設關閉debug除錯模式
$mail->SMTPDebug = 1;

//使用smtp鑑權方式傳送郵件
$mail->isSMTP();

//smtp需要鑑權 這個必須是true
$mail->SMTPAuth=true;

//連結qq域名郵箱的伺服器地址
$mail->Host = $cfg_smtp_server;

//設定使用ssl加密方式登入鑑權
$mail->SMTPSecure = 'ssl';

//設定ssl連線smtp伺服器的遠端伺服器埠號,以前的預設是25,但是現在新的好像已經不可用了 可選465或587
$mail->Port = $cfg_smtp_port;

//設定smtp的helo訊息頭 這個可有可無 內容任意
// $mail->Helo = 'Hello smtp.qq.com Server';

//設定發件人的主機域 可有可無 預設為localhost 內容任意,建議使用你的域名
$mail->Hostname = $cfg_basehost;

//設定傳送的郵件的編碼 可選GB2312 我喜歡utf-8 據說utf8在某些客戶端收信下會亂碼
$mail->CharSet = 'UTF-8';

//設定發件人姓名(暱稱) 任意內容,顯示在收件人郵件的發件人郵箱地址前的發件人姓名
$mail->FromName = $cfg_smtp_user;

//smtp登入的賬號 這裡填入字串格式的qq號即可
$mail->Username = $cfg_smtp_usermail;

//smtp登入的密碼 使用生成的授權碼(就剛才叫你儲存的最新的授權碼)
$mail->Password = $cfg_smtp_password;

//設定發件人郵箱地址 這裡填入上述提到的“發件人郵箱”
$mail->From = $cfg_smtp_usermail;

//郵件正文是否為html編碼 注意此處是一個方法 不再是屬性 true或false
$mail->isHTML(true);

//設定收件人郵箱地址 該方法有兩個引數 第一個引數為收件人郵箱地址 第二引數為給該地址設定的暱稱 不同的郵箱系統會自動進行處理變動 這裡第二個引數的意義不大
$mail->addAddress($cfg_email,$cfg_smtp_user);

//新增多個收件人 則多次呼叫方法即可
// $mail->addAddress('
[email protected]
','lsgo線上通知'); //新增該郵件的主題 $mail->Subject = $diy->name; //新增郵件正文 上方將isHTML設定成了true,則可以是完整的html字串 如:使用file_get_contents函式讀取本地的html檔案 $mail->Body = $emailbody; //為該郵件新增附件 該方法也有兩個引數 第一個引數為附件存放的目錄(相對目錄、或絕對目錄均可) 第二引數為在郵件附件中該附件的名稱 // $mail->addAttachment('./d.jpg','mm.jpg'); //同樣該方法可以多次呼叫 上傳多個附件 // $mail->addAttachment('./Jlib-1.1.0.js','Jlib.js'); if(!$mail->send()) { echo "Fail to send. <p>"; echo "Cause of the error: " . $mail->ErrorInfo; exit; } //郵件傳送結束

測試自定義表單提交發送QQ郵箱效果(因為沒填寫其他表單值,所以獲取為空):

                                 

這裡要注意的是,因為啟用smtp的debug進行除錯,所以在提交表單的時候會有除錯程式碼出現,我們測試成功後可以把加入到diy.php中的程式碼:

$mail->SMTPDebug = 1;
 

 改為:

 

$mail->SMTPDebug = 0;