pop3邮件收取一例

test_pop3.php

<HTML>
<HEAD>
<TITLE>Test for Manuel Lemos's PHP POP3 class</TITLE>
</HEAD>
<BODY>
<?
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 
"<PRE>Connected to the POP3 server &quot;$pop3_connection->hostname&quot;.</PRE>n";
   if((
$error=$pop3_connection->Login($user,$password,$apop))=="")
   {
      echo 
"<PRE>User &quot;$user&quot; logged in.</PRE>n";
      if((
$error=$pop3_connection->Statistics(&$messages,&$size))=="")
      {
         echo 
"<PRE>There are <b>$messages</b> messages in the mail box with a total of <b>$size</b> bytes.</PRE>n";
         
$result=$pop3_connection->ListMessages("",0);
         if(
GetType($result)=="array")
         {
            for(
Reset($result),$message=0;$message<count($result);Next($result),$message++)
               echo 
"<PRE>Message ",Key($result)," - ",$result[Key($result)]," bytes.</PRE>n";
             if(
$messages>0)
            {
                if((
$error=$pop3_connection->RetrieveMessage(1,&$headers,&$body,-1))=="")
                {
                  echo 
"<PRE>Message 1:n---Message headers starts below---</PRE>n";
                  for(
$line=0;$line<count($headers);$line++)
                     echo 
"<PRE>",HtmlSpecialChars($headers[$line]),"</PRE>n";
                  echo 
"<PRE>---Message headers ends above---n---Message body starts below---</PRE>n";
                  for(
$line=0;$line<count($body);$line++)
                     echo 
"<PRE>",HtmlSpecialChars($body[$line]),"</PRE>n";
                  echo 
"<PRE>---Message body ends above---</PRE>n";
                     
                  }
               }
             if(
$error==""&&($error=$pop3_connection->Close())=="")
                  echo 
"<PRE>Disconnected from the POP3 server &quot;$pop3_connection->hostname&quot;.</PRE>n";
         }
        else
           
$error=$result;
      }
   }
}
if(
$error!="")
   echo 
"<H2>Error: ",HtmlSpecialChars($error),"</H2>";
?>
</BODY>
</HTML>


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,"<br>n";
        }

        Function 
GetLine()
        {
                for(
$line="";;)
                {
                        if(
feof($this->connection))
                                return(
0);
                        
$line.=fgets($this->connection,100);
                        
$length=strlen($line);
                        if(
$length>=&& substr($line,$length-2,2)=="rn")
                        {
                                
$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,"$linern"));
        }

        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("rn");
                
$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("rn"));
                }
                
$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("rn"));
                }
                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("rn"));
                        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("rn"));
                }
                
$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("rn"));
                
$messages=strtok(" ");
                
$size=strtok(" ");
                return(
"");
        }

        Function 
ListMessages($message,$unique_id)