|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
让好朋友来看看,嘿,看咱写的多棒,然后再在网上宣传一下。办事器|邮件办事器 电子邮件在收集中占领很主要的位置。今朝,在企业中运转的邮件办事器均用各自自力的办理体系来完成账号创立、口令修正、邮箱扩容、删除邮箱等功效。当邮箱用户到达必定数目时,邮件办理员的平常保护任务显得极其沉重,这就需求将一局部办理义务(如账号请求)完成主动化处置;同时将一局部义务(如口令修正)由多个分组办理员来担任,从而使邮件办理员从繁琐的保护任务中摆脱出来,真正对邮件办事器起到监管感化。
邮件办事器及开辟情况的选择
今朝良多邮件办事器不供应开辟接口,因而在企业外部完成开辟邮件办理体系的重要成绩是,寻觅一种可以与开辟言语相联合的开放式邮件体系。
因为对不乱性请求很高,因而大型电子邮件体系普通都利用Unix作为办事器的操作体系。例如,Hotmail利用的是FreeBSD和Solaris体系。
Linux自带的邮件因为在体系布局上存在必定缺点,难以接受大用户量的会见。qmail是GNU下一款有名的自在软件,是新一代Unix邮件体系,撑持Maildir存储体例。它把每一个邮件作为一个独自的文件保留在用户团体的邮件目次下。qmail撑持虚拟域(Virtual Domain)和虚拟用户(Virtual User)。以后国际盛行的收费电子邮件体系大都采取qmail作为根基办事器软件,供应多级目次以撑持较大的用户数。
从开辟的角度看,PHP+Linux的开辟形式已被很多开辟人员采取。使用PHP来挪用qmail供应的掌握法式,完成对邮件体系的各类办理任务。为完成对大批用户的无效掌握,还可引入数据库办理。本文将引见一个PHP +Oracle+qmail+Linux的开辟实例。
整体设计
全部体系分为邮箱办理和邮件收发两局部。请求邮箱时,先填写一些需要的信息,然后体系会主动地创立邮箱并答应用户当即利用。当用户健忘暗码后,可采取今朝互联网的通用做法,经由过程回覆用户自界说的成绩来修正邮箱暗码。出于平安思索,在用户三次回覆错成绩后,体系将该账号的“修复邮箱暗码”功效锁定30分钟。
邮件办理根据分歧的需求,将用户权限分为以下3种级别:
◆ 通俗用户 可以在阅读器中收发电子邮件、修正邮箱暗码、修正自界说成绩和谜底,并停止邮箱的查询。
◆ 分组办理员 除具有通俗用户的功效外,可以修正本组内一切账号的暗码,消除本科室账号的“修复邮箱暗码”功效锁定。
◆ 邮箱办理员 可以修正全体邮箱口令、删除邮箱、修正邮箱容量、检查邮箱的请求情形,消除全体账号的“修复邮箱暗码”功效锁定。
邮件的收发采取PHP供应的尺度POP3函数,可取得邮件清单、检查邮件的具体内容、发送带多个附件的邮件,并供应邮件删除、答复等功效。
数据库次要由以下几个表构成:
◆ email_info 寄存一切电子邮箱的相干信息,如账号、人员姓名、科室、接洽德律风、自界说成绩、自界说成绩的谜底、锁定标志等。
◆ email_register_info 寄存用户请求电子邮件时填写的信息,如账号、暗码、请求工夫、科室、请求确当前步调(次要是为了避免用户歹意跳过某些步调而设定的)。
◆ email_change_log 纪录用户电子邮箱的变更情形,以备往后需求时反省。次要纪录有邮件的请求工夫、删除工夫、邮箱账号、对邮箱操作的人员姓名、IP地址等信息。
手艺难点剖析
PHP挪用qmail的掌握法式
在Linux情况中,每个法式都有响应的用户和组的概念。PHP法式在办事器中履行时,默许的用户是nobody,没有权力履行qmail的掌握法式。在Linux外面有个sudo号令,答应其它用户以root身份履行一些号令。修正/etc/sudoers文件,增添以下局部:
PHP源码:
--------------------------------------------------------------------------------
nobody ALL=/var/vpopmail/bin/vadduser (增添用户)
nobody ALL=/var/vpopmail/bin/vdeluser (删除用户)
nobody ALL=/var/vpopmail/bin/vpasswd (修正口令)
nobody ALL=/var/vpopmail/bin/vchkpw (反省用户口令是不是准确)
nobody ALL=/var/vpopmail/bin/vsetuserquota (修正邮箱最大容量)
nobody ALL=/var/vpopmail/bin/vmoduser (修正用户信息)
root ALL=(ALL) ALL
--------------------------------------------------------------------------------
在挪用qmail掌握法式时,需求用户手工输出一局部信息。假如要完成主动化,还需求利用Linux中的重定向手艺,将用户事后输出的信息寄存到文件中,利用重定向手艺传递为Shell剧本。
PHP供应履行内部号令的函数为system()、exec()。system()函数履行给定的号令、输入和前往了局。exec()函数与system()相似,但不输入了局。利用法式掌握必需选用exec()函数,并依据履行后的形态来肯定掌握法式是不是准确履行,假如呈现毛病需求向邮件办理员公告。上面代码以“增添用户”功效为例停止申明:
PHP源码:
--------------------------------------------------------------------------------
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!!!<br>";
$error_info = "在履行vadduser号令时掉败";
$address = "From: computer@mail.com\nReply-To: computer@mail.com\n" ;
mail("webmaster@mail.com", $error_info , $message,$address );
}
}
$qmail_email->free();
--------------------------------------------------------------------------------
其它功效如修正口令、修正邮箱容量、删除邮箱等,在法式完成上十分相似,不做过量论述。
E-mail中附件的上传及下载
PHP自己供应上载功效,但依据实践情形,可以响应做一些设置装备摆设和毛病处置。用户可以经由过程修正php.ini文件来扩展上载文件的最大容量。同时,可以经由过程在网页的Form中增添的办法,将单个附件的巨细限制在5MB之内。假如收集速度对照慢,则需求设置网页的timeout变量,不然上载时会由于工夫太长而超时。在办事器真个处置法式局部代码以下:
PHP源码:
--------------------------------------------------------------------------------
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; //失掉上传文件在办事器中的一时文件称号
$file_size = "send_att_size".$i; //失掉上传文件的巨细
$file_mime = "send_att_mime".$i; //失掉上传文件的类型
}
--------------------------------------------------------------------------------
在供应附件下载时,这里没有采取经常使用做法,即给用户供应文件的URL。由于这类做法实际上其实不平安,用户有能够经由过程链接直接下载到该文件。相反,从阅读器没法会见到的目次下读出文件供应给用户下载,就不会碰到相似平安成绩。法式中心代码以下:
PHP源码:
--------------------------------------------------------------------------------
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); //将下载文件读出,供应给用户下载。
}
--------------------------------------------------------------------------------
停止语
该体系在手艺上很完善地将PHP与Oracle数据库联合起来,完成对qmail用户的办理及平常邮箱办事器的保护。今朝该体系已在我公司外部利用了一年多,后果很好。它一方面加重了邮件办理员的平常保护任务;另外一方面为不太熟习邮件设置装备摆设的用户供应网上收发邮件。此体系还有认证、分组办理及邮件收发、汉字编码等方面的功效,因为篇幅无限就纷歧一论述。
第1步环境配置好了,你算了进了1小步了,那么第2步呢 就是调出第1个程序 一般都是用hello world,视频教程里面我都做了,hello world |
|