天天看點

PHP實作郵件的自動發送

最近做一個郵箱驗證的功能,研究了一會,搞定了郵件的自動發送。下面用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實作郵件的自動發送

如果要實作自動發送郵件的話,那麼程式必須能自動的運作。程式在背景自動運作的代碼如下:

<?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);
?>      

程式運作結果為:

PHP實作郵件的自動發送

要去掉上面這些資訊,

隻保留“發送成功等資訊”

需要在這個檔案修改:class.smtp.php

PHP實作郵件的自動發送

最後得到結果顯示如下:

PHP實作郵件的自動發送

這樣就實作了郵件的自動發送。當然,根據以上代碼,還可以實作郵件的定時發送。這個的話,就不在此多叙述了。

參考文獻:

​​ https://github.com/PHPMailer/PHPMailer​​

​​ http://www.helloweba.com/view-blog-205.html​​

​​ http://blog.jjonline.cn/phptech/162.html​​