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;