php pop3类,收pop3邮件的PHP类

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("< $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("");

}

};

?>

例子:

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".

/n";

if(($error=$pop3_connection->Login($user,$password,$apop))=="")

{

echo "

User "$user" logged in.

/n";

if(($error=$pop3_connection->Statistics(&$messages,&$size))=="")

{

echo "

There are $messages messages in the mail box with a total of $size bytes.

/n";

$result=$pop3_connection->ListMessages("",0);

if(GetType($result)=="array")

{

for(Reset($result),$message=0;$message echo "

Message ",Key($result)," - ",$result[Key($result)]," bytes.

/n";

if($messages>0)

{

if(($error=$pop3_connection->RetrieveMessage(1,&$headers,&$body,-1))=="")

{

echo "

Message 1:/n---Message headers starts below---

/n";

for($line=0;$line echo "

",HtmlSpecialChars($headers[$line]),"

/n";

echo "

---Message headers ends above---/n---Message body starts below---

/n";

for($line=0;$line echo "

",HtmlSpecialChars($body[$line]),"

/n";

echo "

---Message body ends above---

/n";

}

}

if($error==""&&($error=$pop3_connection->Close())=="")

echo "

Disconnected from the POP3 server "$pop3_connection->hostname".

/n";

}

else

$error=$result;

}

}

}

if($error!="")

echo "

Error: ",HtmlSpecialChars($error),"

";

?>

原文出处:http://www.dedecms.com/html/php/2005/0409/644.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值