查看 POP3/SMTP 协议的时候想尝试一下自己写一个操作类,核心没啥,就是使用 fsockopen ,然后写入/接收数据,只实现了最核心的部分功能,当作是学习 Socket 操作的练手。其中参考了 RFC 2449和一个国外的简单Web邮件系统 Uebimiau 的部分代码,不过绝对没有抄他滴,HOHO,绝对原创。如果你喜欢,请收藏,随便修改,嗯,但是记得不要删除偶类里的声名,毕竟偶也是辛辛苦苦写了好几天呐。 <?php class SocketPOPClient var $resHandler = NULL; //构造函数 if ($this->strEmail== || $this->strPasswd==) //关闭连接 //发送指令 } //提取响应信息第一行 return $this->strResponse; //提取若干响应信息,$intReturnType是返回值类型, 1为字符串, 2为数组 //提取请求是否成功 //获取是否已连接 //获取消息 //获取错误号 //获取请求信息 //获取响应信息 //登录邮箱 $this->sendCommand(“PASS “.$this->strPasswd); if (!$bolUserRight || !$bolPassRight) //退出登录 //获取是否在线 //获取邮件数量和字节数(返回数组) //获取指定邮件得Session Id //取得某个邮件的大小 //获取邮件基本列表数组 //获取指定邮件所有信息,intReturnType是返回值类型,1是字符串,2是数组 //获取某邮件前指定行, $intReturnType 返回值类型,1是字符串,2是数组 //删除邮件 //重置被删除得邮件标记为未删除 //————— //输出对象信息 //输出错误信息 //输出主机信息 //输出连接信息 ?> /* http://dev.csdn.net/author/heiyeshuwu/b0fd8972a5e942ba81d6d9f5a10ec267.html
另外,欢迎自由发挥,改善或者修正这个类,希望能够为你所用。代码没有认真仔细的调试,发现bug请自己修正,HOHO!
/**
* 类名:SocketPOPClient
* 功能:POP3 协议客户端的基本操作类
* 作者:heiyeluren <http://blog.csdn.net/heiyeshuwu>
* 时间:2006-7-3
* 参考:RFC 2449, Uebimiau
* 授权:BSD License
*/
{
var $strMessage = ;
var $intErrorNum = 0;
var $bolDebug = false;
var $strEmail = ;
var $strPasswd = ;
var $strHost = ;
var $intPort = 110;
var $intConnSecond = 30;
var $intBuffSize = 8192;
var $bolIsLogin = false;
var $strRequest = ;
var $strResponse = ;
var $arrRequest = array();
var $arrResponse = array();
//—————
// 基础操作
//—————
function SocketPOP3Client($strLoginEmail, $strLoginPasswd, $strPopHost=, $intPort=)
{
$this->strEmail = trim(strtolower($strLoginEmail));
$this->strPasswd = trim($strLoginPasswd);
$this->strHost = trim(strtolower($strPopHost));
{
$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;
}
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->getLineResponse();
$bolPassRight = $this->getRestIsSucceed();
{
$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)<=0)
{
$this->setMessage(STAT command response message is error, 2006);
return false;
}
return array($arrResponse[1], $arrResponse[2]);
}
}
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)<=0)
{
$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);
}
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);
}
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 <br>\n”;
echo “[Error Num] : $intErrorNum <br>\n”;
exit;
}
function printHost()
{
echo “[Host] : $this->strHost <br>\n”;
echo “[Port] : $this->intPort <br>\n”;
echo “[Email] : $this->strEmail <br>\n”;
echo “[Passwd] : ******** <br>\n”;
exit;
}
function printConnect()
{
echo “[Connect] : $this->resHandler <br>\n”;
echo “[Request] : $this->strRequest <br>\n”;
echo “[Response] : $this->strResponse <br>\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();
*/
?>
使用php的socket写的pop3类_php实例
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 使用php的socket写的pop3类_php实例
相关推荐
-      thinkphp中and和or查询语句的写法
-      thinkphp下载远程文件代码
-      thinkphp中事务处理代码写法
-      ThinkPHP3.2.3中redirect用法和传参数
-      thinkphp5中模型的定义和控制器调用实例
-      thinkphp5 if模版标签使用用法介绍
-      thinkphp缓存使用实例写法
-      thinkphp5.0中display无法使用了