Home > Backend Development > PHP Tutorial > pop3邮件收取一例_PHP

pop3邮件收取一例_PHP

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Release: 2016-06-01 12:28:49
Original
871 people have browsed it

POP3

test_pop3.php



Test for Manuel Lemos's PHP POP3 class



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".
Copy after login
\n";
if(($error=$pop3_connection->Login($user,$password,$apop))=="")
{
echo "
User "$user" logged in.
Copy after login
\n";
if(($error=$pop3_connection->Statistics(&$messages,&$size))=="")
{
echo "
There are <b>$messages</b> messages in the mail box with a total of <b>$size</b> bytes.
Copy after login
\n";
$result=$pop3_connection->ListMessages("",0);
if(GetType($result)=="array")
{
for(Reset($result),$message=0;$message echo "
Message ",Key($result)," - ",$result[Key($result)]," bytes.
Copy after login
\n";
if($messages>0)
{
if(($error=$pop3_connection->RetrieveMessage(1,&$headers,&$body,-1))=="")
{
echo "
Message 1:\n---Message headers starts below---
Copy after login
\n";
for($line=0;$line echo "
",HtmlSpecialChars($headers[$line]),"
Copy after login
\n";
echo "
---Message headers ends above---\n---Message body starts below---
Copy after login
\n";
for($line=0;$line echo "
",HtmlSpecialChars($body[$line]),"
Copy after login
\n";
echo "
---Message body ends above---
Copy after login
\n";

}
}
if($error==""&&($error=$pop3_connection->Close())=="")
echo "
Disconnected from the POP3 server "$pop3_connection->hostname".
Copy after login
\n";
}
else
$error=$result;
}
}
}
if($error!="")
echo "

Error: ",HtmlSpecialChars($error),"

";
?>




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,"
\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(" 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 {
$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("");
}

};

?>

Related labels:
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template