查看 POP3/SMTP 协议的时候想尝试一下自己写一个操作类,核心没啥,就是使用 fsockopen ,然后写入/接收数据,只实现了最核心的部分功能,当作是学习 Socket 操作的练手。其中参考了 RFC 2449和一个国外的简单Web邮件系统 Uebimiau 的部分代码,不过绝对没有抄他滴,HOHO,绝对原创。如果你喜欢,请收藏,随便修改,嗯,但是记得不要删除偶类里的声名,毕竟偶也是辛辛苦苦写了好几天呐。 另外,欢迎自由发挥,改善或者修正这个类,希望能够为你所用。代码没有认真仔细的调试,发现bug请自己修正,HOHO!<?php /** * 类名:SocketPOPClient * 功能:POP3 协议客户端的基本操作类 * 作者:heiyeluren <http://blog.csdn.net/heiyeshuwu> * 时间:2006-7-3 * 参考:RFC 2449, Uebimiau * 授权:BSD License */ class SocketPOPClient { var $strMessage = ''; var $intErrorNum = 0; var $bolDebug = false; var $strEmail = ''; var $strPasswd = ''; var $strHost = ''; var $intPort = 110; var $intConnSecond = 30; var $intBuffSize = 8192; var $resHandler = NULL; 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)); 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; }   [1] [2] [3] [4] 下一页
 |
频道声明:本频道的文章除部分特别声明禁止转载的专稿外,可以自由转载.但请务必注明出出处和原始作者 文章版权归本频道与文章作者所有.对于被频道转载文章的个人和网站,我们表示深深的谢意。
| 原始作者:佚名 |
录入时间:2007-1-3 3:34:28 |
| 信息来源:不详 |
投稿信箱:itqoo@126.com |
|
|
 |
|