我們在做一個php 郵件發送問題是常常會遇見這樣的問題,就是使用者訂閱一些資料需要定時發送到使用者的郵箱中去。去網上搜尋了一下,發現在這樣的文章不多,本文介紹了一種用PHP實現的方法,筆者用PHP的時間不長,歡迎大家PP。
一、要實現定時發送,主要解決問題是定時。
我們在寫程式時需要加個什麼if 某個時間=某個時間則發送,可是要實現這個過程,面臨的問題是,我們要執行這個頁面才能發送。所以主要解決的問題是怎麼到時讓伺服器定時執行這個頁面,這樣實現起來好像比較困難。
二、我翻開PHP手冊,找到了PHP 的命令列模式這一章,發現能解決這一問題,建議大家如果想用這個方法的話先看看這一章。
三、解決方案:
1、在 Windows 平台下您可以將cli\php.exe 和 .php 檔案的雙擊屬性相關聯,您也可以編寫一個批次檔來用 PHP 執行指令碼。我們把寫好的程式放在一個目錄下如 E:\web\mail.php
然後寫一個windows批次檔內容如下。
@D:\php\cli\php.exe E:\web\mail.php >d:\php\cli\sendmail.log
Pause
那個D:\php\cli\php.exe是我的PHP安裝檔案所在目錄。Php.exe就是windows PHP命令列模式的程式。
好的,我們儲存這個檔案為mail.bat然後的windows中的計劃任務中添加一個任務,讓作業系統在某個時間來運行這個批次檔。
2、如果您使用 Unix 系統,您需要在您的 PHP 指令碼的最前面加上一行特殊的代碼,使得它能夠被執行,這樣系統就能知道用什麼樣的程式要運行該指令碼。為 Unix 系統增加的第一行代碼不會影響該指令碼在 Windows 下的運行,因此您也可以用該方法編 寫跨平台的指令碼程式。以下是一個簡單的PHP 命令列程式的範例。
四、例子:
E:\web \Timesend.php
#!/usr/bin/php
<?php
require_once("E:\web\includes\config.php");
require_once("E:\web\includes\class\mail.class.php");
require_once("E:\web\includes\class\smtp.class.php");
// +----------------------------------------------------+
//資料庫配置
$dbhost = "localhost";
$dbport = "3306";
$dbname = "";
$dbuser = "";
$dbpawd = "";
// +----------------------------------------------------+
//資料庫連接對象
$db = new dbLink($dbhost,$dbport,$dbuser,$dbpawd,$dbname);
$query = "SELECT * FROM wl_mailtemplate WHERE mt_name = 'UserUpdate'";
$mailtemplate =$db->dbQuery($query);
$username = ‘sdfsdfdsd’;
$sex = “先生”;
$accounts = “sdfasdfasdfsad”;
$password = “sdfsadfsdasdasddssfds”;
$message = “
” . $mailtemplate[0]['mt_message']. “
“;
$message = addslashes($message);
eval(“\$message = \”$message\”;”);
$mail = new SendMail(‘wfits@126.com’, $mailtemplate[0]['mt_subject'], nl2br($message));
if ($mail->Send())
{
$feedback = “修改確認資訊已發送到您的註冊Email,當前登入已被登出。\\n請注意查收確認信,並取得新的登入密碼。”;
echo $feedback;
}
?>
寫個bat檔案。
@D:\php\cli\php.exe E:\web\mail.php >d:\php\cli\sendmail.log
Pause
儲存為:timesend.bat放在@D:\php\cli\php.exe目錄下
在window中添加計劃任務,然後就可以啦!
五、說明。
1、 我發送郵件用的是模板在資料庫中存著,還有兩個郵件發送類就不提供了,要的話可以聯絡我。
2、 在使用requrie_once時要用絕對路徑。
3、 PHP 的命令列模式能使得 PHP 指令碼能完全獨立於 WEB 伺服器單獨運行,所以要是大量發送郵件時就能減輕伺服器負擔。