仓酷云

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

[学习教程] PHP教程之PHP操作IMAP办事器的类

[复制链接]
跳转到指定楼层
楼主
发表于 2015-2-4 00:29:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
PHP和HTML混合编程应该不成问题,在这期间,你完全可以让PHP给你算算 一加一等于几,然后在浏览器输出,不要觉得幼稚,这的确是跟阿波罗登月一样,你打的是一小段代码,但是对于你的编程之路,可是迈出了一大步啊!兴奋吧?但是不得不再给你泼点冷水,您还是菜鸟一个。办事器   我以为是相当经典的,帮过我大忙,可以完成良多PHP的IMAP函数不克不及完成的功效。之前在广州站贴过,那时北京站还没PHP版,如今再贴一个吧。:)

<?php
/*************************************************************

File: cyradm.inc.php
Author: 忘了,嘻嘻
Date: 2000-11-01

This is a completely new implementation of the IMAP Access for
PHP. It is based on a socket connection to the server an is
independent from the imap-Functions of PHP

***************************************************************/

class cyradm {

var $host;
var $port;
var $mbox;
var $list;

var $admin;
var $pass;
var $fp;
var $line;
var $error_msg;

/*
#
#Konstruktor
#
*/
function cyradm($IMAP_HOST="localhost", $IMAP_ADMIN="", $IMAP_PW="", $IMAP_PORT="143"){
$this->host = $IMAP_HOST;
$this->port = $IMAP_PORT;
$this->mbox = "";
$this->list = array();

$this->admin = $IMAP_ADMIN;
$this->pass = $IMAP_PW;
$this->fp = 0;
$this->line = "";
$this->error_msg = "";
}


/*
#
# SOCKETLOGIN on Server via Telnet-Connection!
#
*/
function imap_login() {
$this->fp = fsockopen($this->host, $this->port, &$errno, &$errstr);
$this->error_msg=$errstr;
if(!$this->fp) {
echo "<br>ERRORNO: ($errno) <br>ERRSTR: ($errstr)<br><hr>\n";
} else {
$this->command(". login \"$this->admin\" \"$this->pass\"");
}
return $errno;
}


/*
#
# SOCKETLOGOUT from Server via Telnet-Connection!
#
*/
function imap_logout() {
$this->command(". logout");
fclose($this->fp);
}


/*
#
# SENDING COMMAND to Server via Telnet-Connection!
#
*/
function command($line) {
/* print ("$line <br>"); */
$result = array();
$i=0; $f=0;
$returntext="";
$r = fputs($this->fp,"$line\n");
while (!((strstr($returntext,". OK")||(strstr($returntext,". NO"))||(strstr($returntext,". BAD")))))
{
$returntext=$this->getline();
/* print ("$returntext <br>"); */
if ($returntext)
{
if (!((strstr($returntext,". OK")||(strstr($returntext,". NO"))||(strstr($returntext,". BAD")))))
{
$result[$i]=$returntext;
}
$i++;
}
}

if (strstr($returntext,". BAD")||(strstr($returntext,". NO")))
{
$result[0]="$returntext";
$this->error_msg = $returntext;

if (( strstr($returntext,". NO Quota") ))
{

}
else
{
print "<br><hr><H1><center><blink>ERROR: </blink>UNEXPECTED IMAP-SERVER-ERROR</center></H1><hr><br>
<table color=red border=0 align=center cellpadding=5 callspacing=3>
<tr><td>SENT COMMAND: </td><td>$line</td></tr>
<tr><td>SERVER RETURNED:</td><td></td></tr>
";
for ($i=0; $i < count($result); $i++) {
print "<tr><td></td><td>$result[$i]</td></tr>";
}
print "</table><hr><br><br>";
}
}
return $result;
}


/*
#
# READING from Server via Telnet-Connection!
#
*/

function getline() {
$this->line = fgets($this->fp, 256);
return $this->line;
}

/*
#
# QUOTA Functions
#
*/

// GETTING QUOTA

function getquota($mb_name) {
$output=$this->command(". getquota \"$mb_name\"");
if (strstr($output[0],". NO"))
{
$ret["used"] = "NOT-SET";
$ret["qmax"] = "NOT-SET";
}
else
{
$realoutput = str_replace(")", "", $output[0]);
$tok_list = split(" ",$realoutput);
$si_used=sizeof($tok_list)-2;
$si_max=sizeof($tok_list)-1;
$ret["used"] = str_replace(")","",$tok_list[$si_used]);
$ret["qmax"] = $tok_list[$si_max];
}
return $ret;
}


// SETTING QUOTA

function setmbquota($mb_name, $quota) {
$this->command(". setquota \"$mb_name\" (STORAGE $quota)");
}



/*
#
# MAILBOX Functions
#
*/

function createmb($mb_name, $mb_partition="") {
$this->command(". create \"$mb_name\" $mb_partition");
}


function deletemb($mb_name) {
$this->command(". setacl \"$mb_name\" $this->admin d");
$this->command(". delete \"$mb_name\"");
}

function renamemb($mb_name, $newmbname) {
$all="lrswipcda";
$this->setacl($mb_name, $this->admin,$all);
$this->command(". rename \"$mb_name\" \"$newmbname\"");
$this->deleteacl($newmbname, $this->admin);
}

function renameuser($from_mb_name, $to_mb_name) {
$all="lrswipcda"; $find_out=array(); $split_res=array(); $owner=""; $oldowner="";

/* Anlegen und Kopieren der INBOX */
$this->createmb($to_mb_name);
$this->setacl($to_mb_name, $this->admin,$all);
$this->copymailsfromfolder($from_mb_name, $to_mb_name);

/* Quotas uebernehmen */
$quota=$this->getquota($from_mb_name);
$oldquota=trim($quota["qmax"]);

if (strcmp($oldquota,"NOT-SET")!=0) {
$this->setmbquota($to_mb_name, $oldquota);
}

/* Den Rest Umbenennen */
$username=str_replace(".","/",$from_mb_name);
$split_res=explode(".", $to_mb_name);
if (strcmp($split_res[0],"user")==0) {
$owner=$split_res[1];
}
$split_res=explode(".", $from_mb_name);
if (strcmp($split_res[0],"user")==0) {
$oldowner=$split_res[1];
}

$find_out=$this->GetFolders($username);

for ($i=0; $i < count($find_out); $i++) {

if (strcmp($find_out[$i],$username)!=0) {
$split_res=split("$username",$find_out[$i]);
$split_res[1]=str_replace("/",".",$split_res[1]);
$this->renamemb((str_replace("/",".",$find_out[$i])), ("$to_mb_name"."$split_res[1]"));
if ($owner) {
$this->setacl(("$to_mb_name"."$split_res[1]"),$owner,$all);
}
if ($oldowner) {
$this->deleteacl(("$to_mb_name"."$split_res[1]"),$oldowner);
}
};
}
$this->deleteacl($to_mb_name, $this->admin);
$this->imap_logout();
$this->imap_login();
$this->deletemb($from_mb_name);
}

function copymailsfromfolder($from_mb_name, $to_mb_name) {
$com_ret=array();
$find_out=array();
$all="lrswipcda";
$mails=0;

$this->setacl($from_mb_name, $this->admin,$all);
$com_ret=$this->command(". select $from_mb_name");
for ($i=0; $i < count($com_ret); $i++) {
if (strstr( $com_ret[$i], "EXISTS"))
{
$findout=explode(" ", $com_ret[$i]);
$mails=$findout[1];
}
}
if ( $mails != 0 ) {
$com_ret=$this->command(". copy 1:$mails $to_mb_name");
for ($i=0; $i < count($com_ret); $i++) {
print "$com_ret[$i]<br>";
}
}
$this->deleteacl($from_mb_name, $this->admin);
}

/*
#
# ACL Functions
#
*/

function setacl($mb_name, $user, $acl) {
$this->command(". setacl \"$mb_name\" \"$user\" $acl");
}


function deleteacl($mb_name, $user) {
$result=$this->command(". deleteacl \"$mb_name\" \"$user\"");
}


function getacl($mb_name) {
$aclflag=1; $tmp_pos=0;
$output = $this->command(". getacl \"$mb_name\"");
$output = explode(" ", $output[0]);
$i=count($output)-1;
while ($i>3) {
if (strstr($output[$i],'"')) {
$i++;
}

if (strstr($output[$i-1],'"')) {
$aclflag=1;
$lauf=$i-1;
$spacestring=$output[$lauf];
$tmp_pos=$i;
$i=$i-2;
while ($aclflag!=0)
{
$spacestring=$output[$i]." ".$spacestring;
if (strstr($output[$i],'"')) { $aclflag=0; }
$i--;
}
$spacestring=str_replace("\"","",$spacestring);
if ($i>2) {
$ret[$spacestring] = $output[$tmp_pos];
}
}
else
{
$ret[$output[$i-1]] = $output[$i];
$i = $i - 2;
}
}
return $ret;
}

/*
#
# Folder Functions
#
*/

function GetFolders($username){
$username=str_replace("/",".",$username);
$output = $this->command(". list \"$username\" *");

for ($i=0; $i < count($output); $i++) {
$splitfolder=split("\"",$output[$i]);
$output[$i]=str_replace(".","/",$splitfolder[3]);
}
return $output;
}

function EGetFolders($username){
$lastfolder=split("/",$username);
$position=count($lastfolder)-1;
$last=$lastfolder[$position];
$username=str_replace("/",".",$username);
$output = $this->command(". list \"$username\" *");

for ($i=0; $i < count($output); $i++) {
$splitfolder=split("\"",$output[$i]);
$currentfolder=split("\.",$splitfolder[3]);
$current=$currentfolder[$position];
// echo "<br>FOLDER:($) CURRENTFOLDER:($splitfolder[3]) CURRENT:($current) LAST:($last) POSITION:($position)<br>";
if (strcmp($current,$last)==0){
$newoutput[$i]=str_replace(".","/",$splitfolder[3]);
}
}
return $newoutput;
}


/*
#
# Folder-Output Functions
#
*/

function GenerateFolderList($folder_array, $username)
{
print "<table border=0 align=center>";
for ($l=0; $l<count($folder_array); $l++)
{
echo "<tr><td><a href=\"acl.php?username=",
urlencode($username),
"&folder=",
urlencode($folder_array[$l]),
"\">/$folder_array[$l]</td></tr>\n";
};
print "</table>";
}


function GetUsers($char) {
$users = array();
$this->imap_login();
$output=$this->GetFolders("user.$char");
$this->imap_logout();
$j = 0;
$prev = 0;
for ($i=0; $i < count($output); $i++) {
$username = split("/", $output[$i],-1);
$this->debug("($username[1]),
$users[$prev])");
if ((isset($username)) && (isset($users))) {
if (strcmp($username[1], $users[$prev])) {
$users[$j] = $username[1];
$j++;
}
}
if ($j != 0) { $prev = $j - 1; }
}
return $users;
}

function debug($message) {
// echo "<hr>$message<br><hr>";
}


} //KLASSEN ENDE

?>   大部分语言的基础,不是说c有多好,而是c相对起手容易学,让你认为这个是编程语言,
山那边是海 该用户已被删除
沙发
发表于 2015-2-4 13:13:48 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
蒙在股里 该用户已被删除
板凳
发表于 2015-2-6 16:28:38 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
飘灵儿 该用户已被删除
地板
发表于 2015-2-14 01:47:09 | 只看该作者
当然这种网站的会员费就几十块钱。
精灵巫婆 该用户已被删除
5#
发表于 2015-3-4 03:38:26 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
再现理想 该用户已被删除
6#
发表于 2015-3-8 13:30:30 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
变相怪杰 该用户已被删除
7#
发表于 2015-3-13 02:07:17 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
只想知道 该用户已被删除
8#
发表于 2015-3-17 08:10:30 | 只看该作者
做为1门年轻的语言,php一直很努力。
乐观 该用户已被删除
9#
发表于 2015-3-24 02:49:58 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
兰色精灵 该用户已被删除
10#
发表于 2015-3-25 08:51:44 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
11#
 楼主| 发表于 2015-3-31 17:14:46 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
柔情似水 该用户已被删除
12#
发表于 2015-4-1 09:08:23 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
小女巫 该用户已被删除
13#
发表于 2015-4-2 20:30:02 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
若天明 该用户已被删除
14#
发表于 2015-4-9 14:42:35 | 只看该作者
我学习了一段时间后,我发现效果并不好(估计是我自身的问题)。因为一个人的精力总是有限的,同时学习这么多,会导致每个的学习时间都得不到保证。
老尸 该用户已被删除
15#
发表于 2015-4-12 11:15:53 | 只看该作者
要进行开发,搭建环境是首先需要做的事,windows下面我习惯把环境那个安装在C盘下面,因为我配的环境经常出现诡异事件,什么事都没做环境有的时候就不能用啦。
因胸联盟 该用户已被删除
16#
发表于 2015-4-27 06:51:37 | 只看该作者
你很难利用原理去编写自己的代码。对于php来说,系统的学习我认为还是很重要的,当你有一定理解后,你可你针对某种效果研究,我想那时你不会只是复制代码的水平了。
分手快乐 该用户已被删除
17#
发表于 2015-4-30 23:56:01 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
金色的骷髅 该用户已被删除
18#
发表于 2015-5-1 13:10:46 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
小妖女 该用户已被删除
19#
发表于 2015-5-12 13:02:46 | 只看该作者
写js我最烦的就是 ie 和 firefox下同样的代码 结果显示的结果千差万别,还是就是最好不要用遨游去调试,因为有时候遨游是禁用js的,有可能代码是争取结果被遨游折腾的认为是代码写错。
飘飘悠悠 该用户已被删除
20#
发表于 2015-6-7 09:44:02 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-10 23:56

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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