收pop3邮件的PHP类
[code]pop3.php class pop3_class { var $hostname=""; var $port=110; var $connection=0; var $state="DISCONNECTED"; var $greeting=""; var $must_update=0; var $debug=0; Function OutputDebug($message) { echo $message,"
"; } Function GetLine() { for($line="";;) { if(feof($this->connection)) return(0); $line.=fgets($this->connection,100); $length=strlen($line); if($length>=2 && substr($line,$length-2,2)==" ") { $line=substr($line,0,$length-2); if($this->debug) $this->OutputDebug("< $line"); return($line); } } } Function PutLine($line) { if($this->debug) $this->OutputDebug("> $line"); return(fputs($this->connection,"$line ")); } Function OpenConnection() { if($this->hostname=="") return("2 it was not specified a valid hostname"); switch(($this->connection=fsockopen($this->hostname,$this->port))) { case -3: return("-3 socket could not be created"); case -4: return("-4 dns lookup on hostname "$hostname" failed"); case -5: return("-5 connection refused or timed out"); case -6: return("-6 fdopen() call failed"); case -7: return("-7 setvbuf() call failed"); default: return(""); } } Function CloseConnection() { if($this->connection!=0) { fclose($this->connection); $this->connection=0; } } Function Open() { if($this->state!="DISCONNECTED") return("1 a connection is already opened"); if(($error=$this->OpenConnection())!="") return($error); $this->greeting=$this->GetLine(); if(GetType($this->greeting)!="string" || strtok($this->greeting," ")!="+OK") { $this->CloseConnection(); return("3 POP3 server greeting was not found"); } $this->greeting=strtok(" "); $this->must_update=0; $this->state="AUTHORIZATION"; return(""); } Function Close() { if($this->state=="DISCONNECTED") return("no connection was opened"); if($this->must_update) { if($this->PutLine("QUIT")==0) return("Could not send the QUIT command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get quit command response"); if(strtok($response," ")!="+OK") return("Could not quit the connection: ".strtok(" ")); } $this->CloseConnection(); $this->state="DISCONNECTED"; return(""); } Function Login($user,$password,$apop) { if($this->state!="AUTHORIZATION") return("connection is not in AUTHORIZATION state"); if($apop) { if($this->PutLine("APOP $user ".md5($this->greeting.$password))==0) return("Could not send the APOP command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get APOP login command response"); if(strtok($response," ")!="+OK") return("APOP login failed: ".strtok(" ")); } else { if($this->PutLine("USER $user")==0) return("Could not send the USER command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get user login entry response"); if(strtok($response," ")!="+OK") return("User error: ".strtok(" ")); if($this->PutLine("PASS $password")==0) return("Could not send the PASS command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get login password entry response"); if(strtok($response," ")!="+OK") return("Password error: ".strtok(" ")); } $this->state="TRANSACTION"; return(""); } /* Statistics method - pass references to variables to hold the number of messages in the mail box and the size that they take in bytes. */ Function Statistics($messages,$size) { if($this->state!="TRANSACTION") return("connection is not in TRANSACTION state"); if($this->PutLine("STAT")==0) return("Could not send the STAT command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get the statistics command response"); if(strtok($response," ")!="+OK") return("Could not get the statistics: ".strtok(" ")); $messages=strtok(" "); $size=strtok(" "); return(""); } Function ListMessages($message,$unique_id) { if($this->state!="TRANSACTION") return("connection is not in TRANSACTION state"); if($unique_id) $list_command="UIDL"; else $list_command="LIST"; if($this->PutLine("$list_command $message")==0) return("Could not send the $list_command command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get message list command response"); if(strtok($response," ")!="+OK") return("Could not get the message listing: ".strtok(" ")); if($message=="") { for($messages=array();;) { $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get message list response"); if($response==".") break; $message=intval(strtok($response," ")); if($unique_id) $messages[$message]=strtok(" "); else $messages[$message]=intval(strtok(" ")); } return($messages); } else { $message=intval(strtok(" ")); return(intval(strtok(" "))); } } Function RetrieveMessage($message,$headers,$body,$lines) { if($this->state!="TRANSACTION") return("connection is not in TRANSACTION state"); if($lines<0) { $command="RETR"; $arguments="$message"; } else { $command="TOP"; $arguments="$message $lines"; } if($this->PutLine("$command $arguments")==0) return("Could not send the $command command"); $response=$this->GetLine(); if(GetType($response)!="string") return("Could not get message retrieval command response"); if(strtok($response," ")!="+OK") return("Could not retrieve the message: ".strtok(" ")); for($headers=$body=array(),$line=0;;$line++) { $response=$this->GetLine(); if(GetType($response)!="string") return("Could not retrieve the message"); switch($response) { case ".": return(""); case "": break 2; default: if(substr($response,0,1)==".") $response=substr($response,1,strlen($response)-1); break; } $headers[$line]=$response; } for($line=0;;$line++) { $response=$this->GetLine(); if(GetType($response)!="string") return("Could not retrieve the message"); switch($response) { case ".": return(""); default: if(substr($response,0,1)==".") $response=substr($response,1,strlen($response)-1); break; } $body[$line]=$response; } return(""); } }; ?> 例子: require("pop3.php"); $user="user"; $password="passwd"; $apop=0; $pop3_connection=new pop3_class; $pop3_connection->hostname="mail.xiaocui.com"; if(($error=$pop3_connection->Open())=="") { echo " Connected to the POP3 server "$pop3_connection->hostname".
"; if(($error=$pop3_connection->Login($user,$password,$apop))=="") { echo " User "$user" logged in.
"; if(($error=$pop3_connection->Statistics(&$messages,&$size))=="") { echo " There are $messages messages in the mail box with a total of $size bytes.
"; $result=$pop3_connection->ListMessages("",0); if(GetType($result)=="array") { for(Reset($result),$message=0;$message echo " Message ",Key($result)," - ",$result[Key($result)]," bytes.
"; if($messages>0) { if(($error=$pop3_connection->RetrieveMessage(1,&$headers,&$body,-1))=="") { echo " Message 1: ---Message headers starts below---
"; for($line=0;$line echo " ",HtmlSpecialChars($headers[$line]),"
"; echo " ---Message headers ends above--- ---Message body starts below---
"; for($line=0;$line echo " ",HtmlSpecialChars($body[$line]),"
"; echo " ---Message body ends above---
"; } } if($error==""&&($error=$pop3_connection->Close())=="") echo " Disconnected from the POP3 server "$pop3_connection->hostname".
"; } else $error=$result; } } } if($error!="") echo " Error: ",HtmlSpecialChars($error)," "; ?>
[/code]
|