最近做一個郵箱驗證的功能,研究了一會,搞定了郵件的自動發送。下面用qq郵箱作為示範,一步一步來解釋:
代碼下載下傳位址
首先,就是做到郵件的發送,代碼如下:
<?PHP
//郵件發送
require './mailer/class.phpmailer.php';
require './mailer/class.smtp.php';
date_default_timezone_set('PRC');//設定郵件發送的時間,如果不設定,則會顯示其他區的時間
$mail = new PHPMailer();
//是否啟用smtp的debug進行調試 開發環境建議開啟 生産環境注釋掉即可 預設關閉debug調試模式
$mail->SMTPDebug = 3;
//使用smtp鑒權方式發送郵件,當然你可以選擇pop方式 sendmail方式等 本文不做詳解
//可以參考http://phpmailer.github.io/PHPMailer/當中的詳細介紹
$mail->isSMTP();
//smtp需要鑒權 這個必須是true
$mail->SMTPAuth=true;
//連結qq域名郵箱的伺服器位址
$mail->Host = 'smtp.qq.com';
//設定使用ssl加密方式登入鑒權
$mail->SMTPSecure = 'ssl';
//設定ssl連接配接smtp伺服器的遠端伺服器端口号 可選465或587
$mail->Port = 465;
//設定發件人的主機域 可有可無 預設為localhost 内容任意,建議使用你的域名,這裡為預設localhost
$mail->Hostname = 'localhost';
//設定發送的郵件的編碼 可選GB2312
$mail->CharSet = 'UTF-8';
//設定發件人姓名(昵稱)可為任意内容,不影響回複(設定為qq昵稱即可)
$mail->FromName = 'XXXX';
//smtp登入的賬号 這裡填入qq号即可
$mail->Username ='發送者的QQ号';
//smtp登入的密碼 這裡填入“獨立密碼” 若為設定“獨立密碼”則填入登入qq的密碼 建議設定“獨立密碼”
$mail->Password = 'QQ郵箱的登入密碼';
//設定發件人郵箱位址 這裡填入上述提到的“發件人郵箱”
$mail->From = '發送者的QQ郵箱';
//郵件正文是否以html方式發送
$mail->isHTML(true);
//設定收件人郵箱位址 該方法有兩個參數 第一個參數為收件人郵箱位址 第二參數為給該位址設定的昵稱 不同的郵箱系統會自動進行處理變動 這裡第二個參數的意義不大
$mail->addAddress('收件人的QQ郵箱位址','QQ昵稱');
//可添加多個收件人
//$mail->addAddress('[email protected]','XXXXX');
//添加該郵件的主題
$mail->Subject = '這是一個PHPMailer發送郵件的示例';
//添加郵件正文
$mail->Body = "這是一個<b style=\"color:red;\">PHPMailer</b>發送郵件的一個測試用例";
//為該郵件添加附件 該方法也有兩個參數 第一個參數為附件存放的目錄(相對目錄、或絕對目錄均可)
//第二參數為在郵件附件中該附件的名稱
$mail->addAttachment('./src/20151002.png','test.png');
//同樣該方法可以多次調用 上傳多個附件
//$mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
//發送指令 傳回布爾值
//PS:經過測試,要是收件人不存在.若不出現錯誤依然傳回true也就是說在發送之前
//自己需要些方法實作檢測該郵箱是否真實有效
$status = $mail->send();
//簡單的判斷與提示資訊
if($status)
{
echo '發送郵件成功'.date('Y-m-d H:i:s');;
}
else
{
echo '發送郵件失敗,錯誤資訊未:'.$mail->ErrorInfo;
}
?>
這樣就可以實作郵件的發送了。結果如下:
如果要實作自動發送郵件的話,那麼程式必須能自動的運作。程式在背景自動運作的代碼如下:
<?php
ignore_user_abort(); // 背景運作
set_time_limit(0); // 取消腳本運作時間的逾時上限
$interval=60*30;// 每隔半小時運作,這個間隔時間是可以随着 需要進行修改
do{
XXXXX //這裡是你要執行的代碼
sleep($interval); // 休眠半小時
}while(true);
?>
将發送郵件的代碼和自動運作的代碼結合起來,就可以實作郵件的自動發送:
<?php
//郵件發送
require './mailer/class.phpmailer.php';
require './mailer/class.smtp.php';
date_default_timezone_set('PRC');
ignore_user_abort();//背景運作
set_time_limit(0);//取消腳本運作時間的逾時上限
$interval = 60*1;//每隔一分鐘運作一次(這個可以根據需要來進行調整)
do{
$mail = new PHPMailer();
$mail->SMTPDebug = 3;
$mail->isSMTP();
$mail->SMTPAuth=true;
$mail->Host = 'smtp.qq.com';
$mail->SMTPSecure = 'ssl';
$mail->Port = 465;
$mail->Hostname = 'localhost';
$mail->CharSet = 'UTF-8';
$mail->FromName = 'XXXX';
$mail->Username ='發送者的QQ号';
$mail->Password = 'QQ郵箱的登入密碼';
$mail->From = '發送者的QQ郵箱';
$mail->isHTML(true);
$mail->addAddress('收件人的QQ郵箱位址','QQ昵稱');
//$mail->addAddress('[email protected]','XXXXX');
$mail->Subject = '這是一個PHPMailer發送郵件的示例';
$mail->Body = "這是一個<b style=\"color:red;\">PHPMailer</b>發送郵件的一個測試用例";
$mail->addAttachment('./src/20151002.png','test.png');
//$mail->addAttachment('./Jlib-1.1.0.js','Jlib.js');
$status = $mail->send();
if($status)
{
echo '發送郵件成功'.date('Y-m-d H:i:s');;
}
else
{
echo '發送郵件失敗,錯誤資訊未:'.$mail->ErrorInfo;
}
sleep($interval);//休眠1minute
}while(true);
?>
程式運作結果為:
要去掉上面這些資訊,
隻保留“發送成功等資訊”
需要在這個檔案修改:class.smtp.php
最後得到結果顯示如下:
這樣就實作了郵件的自動發送。當然,根據以上代碼,還可以實作郵件的定時發送。這個的話,就不在此多叙述了。
參考文獻:
https://github.com/PHPMailer/PHPMailer
http://www.helloweba.com/view-blog-205.html
http://blog.jjonline.cn/phptech/162.html