stremail        = trim(strtolower($strloginemail));         $this->strpasswd    = trim($strloginpasswd);         $this->strhost        = trim(strtolower($strpophost));        if ($this->stremail=='' || $this->strpasswd=='')         {             $this->setmessage('email address or passwd is empty', 1001);             return false;         }         if (!preg_match(/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/i, $this->stremail))         {             $this->setmessage('email address invalid', 1002);             return false;         }         if ($this->strhost=='')         {             $this->strhost = substr(strrchr($this->stremail, @), 1);         }         if ($intport!='')         {             $this->intport = $intport;         }         $this->connecthost();     }    //连接服务器 
    function connecthost()     {         if ($this->boldebug)         {             echo connection .$this->strhost. ...\r\n;         }         if (!$this->getisconnect())         {             if ($this->strhost=='' || $this->intport=='')             {                 $this->setmessage('pop3 host or port is empty', 1003);                 return false;                         }             $this->reshandler = @fsockopen($this->strhost, $this->intport, &$this->interrornum, &$this->strmessage, $this->intconnsecond);             if (!$this->reshandler)             {                 $strerrmsg = 'connection pop3 host: '.$this->strhost.' failed';                 $interrnum = 2001;                 $this->setmessage($strerrmsg, $interrnum);                 return false;             }             $this->getlineresponse();             if (!$this->getrestissucceed())             {                 return false;             }         }         return true;     }    //关闭连接     function closehost()     {         if ($this->reshandler)         {             fclose($this->reshandler);         }         return true;     }    //发送指令     function sendcommand($strcommand)     {         if ($this->boldebug)         {             if (!preg_match(/pass/, $strcommand))             {                 echo send command: .$strcommand.\r\n;             }             else             {                 echo send command: pass ******\r\n;             }        }         if (!$this->getisconnect())         {             return false;         }         if (trim($strcommand)=='')         {             $this->setmessage('request command is empty', 1004);             return false;         }         $this->strrequest = $strcommand.\r\n;         $this->arrrequest[] = $strcommand;         fputs($this->reshandler, $this->strrequest);         return true;     }    //提取响应信息第一行     function getlineresponse()     {         if (!$this->getisconnect())         {             return false;         }         $this->strresponse = fgets($this->reshandler, $this->intbuffsize);         $this->arrresponse[] = $this->strresponse;        return $this->strresponse;             }    //提取若干响应信息,$intreturntype是返回值类型, 1为字符串, 2为数组     function getrespmessage($intreturntype)     {         if (!$this->getisconnect())         {             return false;         }         if ($intreturntype == 1)         {             $strallresponse = '';             while(!feof($this->reshandler))             {                 $strlineresponse = $this->getlineresponse();                 if (preg_match(/^\+ok/, $strlineresponse))                 {                     continue;                 }                 if (trim($strlineresponse)=='.')                 {                     break;                 }                 $strallresponse .= $strlineresponse;             }             return $strallresponse;         }         else         {             $arrallresponse = array();             while(!feof($this->reshandler))             {                 $strlineresponse = $this->getlineresponse();                 if (preg_match(/^\+ok/, $strlineresponse))                 {                     continue;                 }                 if (trim($strlineresponse)=='.')                 {                     break;                 }                 $arrallresponse[] = $strlineresponse;             }             return $arrallresponse;                     }     }    //提取请求是否成功     function getrestissucceed($strrespmessage='')     {         if (trim($responsemessage)=='')         {             if ($this->strresponse=='')             {                 $this->getlineresponse();             }             $strrespmessage = $this->strresponse;         }         if (trim($strrespmessage)=='')         {             $this->setmessage('response message is empty', 2003);             return false;         }         if (!preg_match(/^\+ok/, $strrespmessage))         {             $this->setmessage($strrespmessage, 2000);             return false;         }         return true;     }    //获取是否已连接     function getisconnect()     {         if (!$this->reshandler)         {             $this->setmessage(nonexistent availability connection handler, 2002);             return false;         }         return true;     }    //设置消息 
    function setmessage($strmessage, $interrornum)     {         if (trim($strmessage)=='' || $interrornum=='')         {             return false;         }         $this->strmessage    = $strmessage;         $this->interrornum    = $interrornum;         return true;     }    //获取消息     function getmessage()     {         return $this->strmessage;     }    //获取错误号     function geterrornum()     {         return $this->interrornum;     }    //获取请求信息     function getrequest()     {         return $this->strrequest;             }    //获取响应信息     function getresponse()     {         return $this->strresponse;     }    //--------------- 
    // 邮件原子操作     //---------------    //登录邮箱     function poplogin()     {         if (!$this->getisconnect())         {             return false;         }         $this->sendcommand(user .$this->stremail);         $this->getlineresponse();         $boluserright = $this->getrestissucceed();        $this->sendcommand(pass .$this->strpasswd);         $this->getlineresponse();         $bolpassright = $this->getrestissucceed();        if (!$boluserright || !$bolpassright)         {             $this->setmessage($this->strresponse, 2004);             return false;         }                 $this->bolislogin = true;         return true;     }    //退出登录     function poplogout()     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         $this->sendcommand(quit);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return true;     }    //获取是否在线     function getisonline()     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         $this->sendcommand(noop);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return true;             }    //获取邮件数量和字节数(返回数组)     function getmailsum($intreturntype=2)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         $this->sendcommand(stat);         $strlineresponse = $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         if ($intreturntype==1)         {             return     $this->strresponse;         }         else         {             $arrresponse = explode( , $this->strresponse);             if (!is_array($arrresponse) || count($arrresponse)            {                 $this->setmessage('stat command response message is error', 2006);                 return false;             }             return array($arrresponse[1], $arrresponse[2]);         }     }    //获取指定邮件得session id     function getmailsessid($intmailid, $intreturntype=2)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         if (!$intmailid = intval($intmailid))         {             $this->setmessage('mail message id invalid', 1005);             return false;         }         $this->sendcommand(uidl . $intmailid);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         if ($intreturntype == 1)         {             return     $this->strresponse;         }         else         {             $arrresponse = explode( , $this->strresponse);             if (!is_array($arrresponse) || count($arrresponse)            {                 $this->setmessage('uidl command response message is error', 2006);                 return false;             }             return array($arrresponse[1], $arrresponse[2]);         }     }    //取得某个邮件的大小     function getmailsize($intmailid, $intreturntype=2)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         $this->sendcommand(list .$intmailid);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         if ($intreturntype == 1)         {             return $this->strresponse;         }         else         {             $arrmessage = explode(' ', $this->strresponse);             return array($arrmessage[1], $arrmessage[2]);         }     }    //获取邮件基本列表数组     function getmailbaselist($intreturntype=2)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         $this->sendcommand(list);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return $this->getrespmessage($intreturntype);     }    //获取指定邮件所有信息,intreturntype是返回值类型,1是字符串,2是数组     function getmailmessage($intmailid, $intreturntype=1)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         if (!$intmailid = intval($intmailid))         {             $this->setmessage('mail message id invalid', 1005);             return false;         }         $this->sendcommand(retr . $intmailid);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return $this->getrespmessage($intreturntype);     }    //获取某邮件前指定行, $intreturntype 返回值类型,1是字符串,2是数组     function getmailtopmessage($intmailid, $inttoplines=10, $intreturntype=1)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         if (!$intmailid=intval($intmailid) || !$inttoplines=int($inttoplines))         {             $this->setmessage('mail message id or top lines number invalid', 1005);             return false;         }         $this->sendcommand(top . $intmailid . . $inttoplines);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return $this->getrespmessage($intreturntype);     }    //删除邮件     function delmail($intmailid)     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         if (!$intmailid=intval($intmailid))         {             $this->setmessage('mail message id invalid', 1005);             return false;         }         $this->sendcommand(dele .$intmailid);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return true;     }    //重置被删除得邮件标记为未删除     function resetdelemail()     {         if (!$this->getisconnect() && $this->bolislogin)         {             return false;         }         $this->sendcommand(rset);         $this->getlineresponse();         if (!$this->getrestissucceed())         {             return false;         }         return true;             }    //---------------     // 调试操作     //---------------    //输出对象信息     function printobject()     {         print_r($this);         exit;     }    //输出错误信息     function printerror()     {         echo [error msg] : $strmessage     
\n;         echo [error num] : $interrornum 
\n;         exit;     }    //输出主机信息     function printhost()     {         echo [host]  : $this->strhost 
\n;         echo [port]  : $this->intport 
\n;         echo [email] : $this->stremail 
\n;         echo [passwd] : ******** 
\n;         exit;     }    //输出连接信息     function printconnect()     {         echo [connect] : $this->reshandler 
\n;         echo [request] : $this->strrequest 
\n;         echo [response] : $this->strresponse 
\n;         exit;     } }?>
复制代码
调用示例: 
 //测试代码 //例如:$o = socketpop3client('邮箱地址', '密码', 'pop3服务器', 'pop3端口')/* set_time_limit(0); $o = new socketpopclient('abc@126.com', '123456', 'pop.126.com', '110'); $o->poplogin(); print_r($o->getmailbaselist()); print_r($o->getmailsum(1)); print_r($o->getmailtopmessage(2, 2, 2)); $o->poplogout(); $o->closehost(); $o->printobject(); */ ?>
复制代码
   
 
   