WEB开发网
开发学院WEB开发PHP pop3邮件收取一例 阅读

pop3邮件收取一例

 2000-12-05 16:27:50 来源:WEB开发网   
核心提示:test_pop3.php<HTML><HEAD><TITLE>Test for Manuel Lemos's PHP POP3 class</TITLE></HEAD><BODY><?require("pop3.php&q
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 "$pop3_connection->hostname".</PRE>\n";
  if(($error=$pop3_connection->Login($user,$password,$apop))=="")
  {
   echo "<PRE>User "$user" 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 "$pop3_connection->hostname".</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>=2 && substr($line,$length-2,2)=="\r\n")
            {
                $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\r\n"));
    }

    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("\r\n");
        $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("\r\n"));
        }
        $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("\r\n"));
        }
        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("\r\n"));
            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("\r\n"));
        }
        $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("\r\n"));
        $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("\r\n"));
        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("\r\n"));
        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("");
    }

};

?>

Tags:pop 邮件 收取

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接