您当时的方位:主页 > 言语编程 > PHP

用PHP开发qmail邮件服务器办理体系

2014-08-18  www.codeforacause.net
  电子邮件在网络中占有很重要的位置。现在,在企业中运转的邮件服务器均用各自独立的办理体系来完成账号创立、口令修正、邮箱扩容、删去邮箱等功用。当邮箱用户到达必定数量时,邮件办理员的日常保护作业显得极为深重,这就需求将一部分办理使命(如账号请求)完成自动化处理;一起将一部分使命(如口令修正)由多个分组办理员来担任,从而使邮件办理员从繁琐的保护作业中摆脱出来,真正对邮件服务器起到监管效果。

  邮件服务器及开发环境的挑选

  现在许多邮件服务器不供给开发接口,因而在企业内部完成开发邮件办理体系的首要问题是,寻觅一种能够与开发言语相结合的开放式邮件体系。

  因为对安稳性要求很高,因而大型电子邮件体系一般都运用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文件,添加以下部分:

  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()函数,并依据履行后的状况来确认操控程序是否正确履行,假如呈现过错需求向邮件办理员布告。下面代码以“添加用户”功用为例进行阐明:

  (未完)