仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1596|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页编程之利用PHP开辟qmail邮件办事器办理体系

[复制链接]
若相依 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:09:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

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
莫相离 该用户已被删除
沙发
发表于 2015-2-4 09:34:56 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
板凳
发表于 2015-2-7 08:14:11 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
简单生活 该用户已被删除
地板
发表于 2015-2-21 05:40:09 | 只看该作者
本文当是我的笔记啦,遇到的问题随时填充
爱飞 该用户已被删除
5#
发表于 2015-3-6 19:37:36 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
灵魂腐蚀 该用户已被删除
6#
发表于 2015-3-7 21:03:00 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
愤怒的大鸟 该用户已被删除
7#
发表于 2015-3-15 13:44:16 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
山那边是海 该用户已被删除
8#
发表于 2015-3-22 01:10:31 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
老尸 该用户已被删除
9#
发表于 2015-4-6 03:09:39 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
透明 该用户已被删除
10#
发表于 2015-4-7 13:56:11 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
海妖 该用户已被删除
11#
发表于 2015-4-11 03:09:59 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
飘灵儿 该用户已被删除
12#
发表于 2015-4-12 15:19:36 | 只看该作者
爱上php,他也会爱上你。
小妖女 该用户已被删除
13#
发表于 2015-4-15 10:13:31 | 只看该作者
为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。
金色的骷髅 该用户已被删除
14#
发表于 2015-4-17 10:39:38 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
活着的死人 该用户已被删除
15#
发表于 2015-4-29 12:06:10 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
深爱那片海 该用户已被删除
16#
发表于 2015-6-18 21:02:15 | 只看该作者
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。
若天明 该用户已被删除
17#
发表于 2015-6-19 11:47:36 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
再见西城 该用户已被删除
18#
发表于 2015-6-20 02:40:49 | 只看该作者
如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域,
分手快乐 该用户已被删除
19#
发表于 2015-6-23 02:57:06 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
再现理想 该用户已被删除
20#
发表于 2015-6-27 00:17:22 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-16 16:57

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表