require("/home/httpd/phplib/qmail.inc");
$qmail_date = "v1";
$qmail_email = new register_email ;
$sql = "select pw_name from ".$qmail_date;
$qmail_email->query($sql);
while ($qmail_email->next_record())
{
$qmail_user = $qmail_email->f("pw_name");
$passwd = "12345";
$str_command = "sudo /var/vpopmail/bin/vadduser " .$qmail_user.;
$str_command = $str_command."@mail.com".$passwd." -q 10000000 < /home/n";
@exec($str_command,$str,&$result);
if ($result != 0 )
{
echo "command string is :".$str_command." , command is failed!!!
";
$error_info = "在執(zhí)行vadduser命令時失敗";
$address = "From: computer@mail.com\nReply-To: computer@mail.com\n" ;
mail("webmaster@mail.com", $error_info , $message,$address );
}
}
$qmail_email->free();
其它功能如修改口令、修改郵箱容量、刪除郵箱等,在程序?qū)崿F(xiàn)上非常類似,不做過多闡述。
E-mail中附件的上傳及
PHP本身提供上載功能,但根據(jù)實(shí)際情況,可以相應(yīng)做一些配置和錯誤處理。用戶可以通過修改php.ini文件來擴(kuò)大上載文件的最大容量。同時,可以通過在網(wǎng)頁的Form中增加的方法,將單個附件的大小限制在5MB以內(nèi)。如果網(wǎng)絡(luò)速度比較慢,則需要設(shè)置網(wǎng)頁的timeout變量,否則上載時會因?yàn)闀r間太長而超時。在服務(wù)器端的處理程序部分代碼如下:
if (!file_exists($mail_att)) //判斷文件是否上載成功
{ //錯誤處理及顯示
break ;
}
copy ($mail_att, $mail_att.".att") ; //將附件重新改名并拷貝到指定位置。
for ($i = 1; $i <= $num_attach; $i++)
{
$file_name = "send_att".$i; //得到上傳文件的原始名稱
$file_tmp = "send_att_tmp".$i; //得到上傳文件在服務(wù)器中的臨時文件名稱
$file_size = "send_att_size".$i; //得到上傳文件的大小
$file_mime = "send_att_mime".$i; //得到上傳文件的類型
}
在提供附件時,這里沒有采用常用做法,即給用戶提供文件的URL。因?yàn)檫@種做法理論上并不安全,用戶有可能通過鏈接直接到該文件。相反,從瀏覽器無法訪問到的目錄下讀出文件提供給用戶,就不會遇到類似安全問題。程序核心代碼如下:
if (file_exists($attach_filepos)) //判斷文件是否存在
{
$size = filesize($attach_filepos); //得到文件的大小
//將用戶原始文件名提供給用戶。
header("Content-Disposition: attachment; filename=".$attach_filename);
header("Content-length: ".$size);
header("Content-type: application/x-zip-compressed");
readfile($attach_filepos); //將文件讀出,提供給用戶。
}
結(jié)束語
該系統(tǒng)在技術(shù)上很完美地將PHP與Oracle數(shù)據(jù)庫結(jié)合起來,實(shí)現(xiàn)對qmail用戶的管理及日常郵箱服務(wù)器的維護(hù)。目前該系統(tǒng)已在我公司內(nèi)部使用了一年多,效果很好。它一方面減輕了郵件管理員的日常維護(hù)工作;另一方面為不太熟悉郵件配置的用戶提供網(wǎng)上收發(fā)郵件。此系統(tǒng)還有認(rèn)證、分組管理及郵件收發(fā)、漢字編碼等方面的功能,由于篇幅有限就不一一闡述。