-
-
/** - * PHP 소켓 POP3类
- * by bbs.it-home.org
- */
- 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();
//---------------
- // 기본 동작
- //---------------
- // 생성 함수
- 함수 SocketPOP3Client($strLoginEmail, $strLoginPasswd, $strPopHost='', $intPort='')
- {
- $this->strEmail = Trim(strtolower($strLoginEmail));
- $this->strPasswd = 트림($strLoginPasswd);
- $this->strHost = Trim(strtolower($strPopHost));
- if ($this->strEmail=='' || $this->strPasswd=='')
- {
- $this->setMessage('이메일 주소 또는 비밀번호가 비어있습니다.', 1001);
- false를 반환합니다.
- }
- if (!PReg_match("/^[w-] (.[w-] )*@[w-] (.[w-] ) $/i", $this->strEmail ))
- {
- $this->setMessage('이메일 주소가 잘못되었습니다.', 1002);
- 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." .. .rn";
- }
- if (!$this->getIsConnect())
- {
- if ($this->strHost=='' || $this->intPort=='' )
- {
- $this->setMessage('POP3 호스트 또는 포트가 비어 있습니다.', 1003);
- false를 반환합니다.
- }
- $this->resHandler = @fsockopen($this->strHost, $this->intPort, &$this->intErrorNum, &$this->strMessage, $this- >intConnSecond);
- if (!$this->resHandler)
- {
- $strErrMsg = '연결 POP3 호스트: '.$this->strHost.' 실패한';
- $intErrNum = 2001;
- $this->setMessage($strErrMsg, $intErrNum);
- false를 반환합니다.
- }
- $this->getLineResponse();
- if (!$this->getRestIsSucceed())
- {
- return false;
- }
- }
- true를 반환합니다.
- }
- // 연결 끊기
- function closeHost()
- {
- if ($this->resHandler)
- {
- fclose($this->resHandler) ;
- }
- true를 반환합니다.
- }
- // 명령 보내기
- function sendCommand($strCommand)
- {
- if ($this->bolDebug)
- {
- if (!preg_match("/ PASS/", $strCommand))
- {
- echo "명령 보내기: ".$strCommand."rn";
- }
- else
- {
- echo "명령 보내기: PASS ******rn";
- }
- }
- if (!$this->getIsConnect())
- {
- return false;
- }
- if (trim($strCommand)=='')
- {
- $this->setMessage('요청 명령이 비어 있습니다.', 1004);
- false를 반환합니다.
- }
- $this->strRequest = $strCommand."rn";
- $this->arrRequest[] = $strCommand;
- fputs($this->resHandler, $this->strRequest);
- true를 반환합니다.
- }
- // 正解电影电影的主行第一行
- function getLineResponse()
- {
- if (!$this->getIsConnect())
- {
- 거짓을 반환;
- }
- $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))
- {
- 계속;
- }
- if (trim($strLineResponse)=='.')
- {
- break
- }
- $strAllResponse .= $strLineResponse; > }
- return $strAllResponse;
- }
- else
- {
- $arrAllResponse = array()
- while(!feof($this->resHandler))
- {
- $strLineResponse = $this->getLineResponse();
- if (preg_match("/^ OK/", $strLineResponse))
- {
- 계속; 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('응답 메시지가 비어 있습니다', 2003) return false;
- }
- if (!preg_match("/^ OK/", $strRespMessage))
- {
- $this->setMessage($strRespMessage, 2000)
- return false; 🎜> }
- return true;
- }
- //연결 여부 확인
- function getIsConnect()
- {
- if (!$this->resHandler)
- {
- $ this->setMessage("존재하지 않는 가용성 연결 처리기", 2002);
- return false
- }
- return true; ;p> // 메시지 설정
- function setMessage($strMessage, $intErrorNum)
- {
- if (trim($strMessage)=='' || $intErrorNum=='')
- {
- false ;
- }
- $this->strMessage = $strMessage;
- $this->intErrorNum = $intErrorNum;
- }
- / /메시지 가져오기
- 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; ;
- }
- //로그아웃
- function popLogout()
- {
- if (!$this->getIsConnect() && $this->bolIsLogin)
- {
- false 반환
- }
- $this->sendCommand("QUIT")
- $this->getLineResponse()
- if (!$this->getRestIsSucceed() )
- {
- false를 반환합니다.
- }
- 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 =explore(" ", $this-> ;strResponse);
- if (!is_array($arrResponse) || count($arrResponse)<=0)
- {
- $this->setMessage('STAT 명령 응답 메시지가 오류입니다.', 2006);
- return false;
- }
- return array($arrResponse[1], $arrResponse[2])
- }
- }
- // 지정된 이메일 ID
- 함수 getMailSessId($intMailId, $intReturnType=2)
- {
- if (!$this->getIsConnect() && $this->bolIsLogin)
- {
- return false
- }
- if (!$intMailId = intval($intMailId))
- {
- $this->setMessage('잘못된 메일 메시지 ID', 1005) return false;
- }
- $this->sendCommand("UIDL ".$intMailId)
- $this->getLineResponse()
- if (!$this->getRestIsSucceed() )
- {
- return false;
- }
- if ($intReturnType == 1)
- {
- return $this->strResponse
- }
- else
- {
- $arrResponse = 폭발(" ", $this->strResponse)
- if (!is_array($arrResponse) || count($arrResponse)<=0)
- {
- $this->setMessage('UIDL 명령 응답 메시지가 오류입니다', 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"); >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('잘못된 메일 메시지 ID', 1005)
- return false
- }
- $this->sendCommand("RETR " . $intMailId);
- $ this->getLineResponse();
- if (!$this->getRestIsSucceed())
- {
- return false; $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('메일 메시지 ID 또는 상위 행 번호가 잘못되었습니다.', 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('잘못된 메일 메시지 ID', 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(); !$this->getRestIsSucceed())
- {
- return false
- }
- return true
- }
- //--------- - ----
- // 디버깅 작업
- // ---------------
- // 객체 정보 출력
- function printObject()
- {
- print_r($this);
- 종료;
- }
- //오류 메시지 출력
- function printError()
- {
- echo "[오류 메시지] : $strMessage < ;br>n";
- echo "[오류 번호] : $intErrorNum
n";
- exit;
- }
- //호스트 정보 출력
- function printHost()
- {
- echo "[호스트] : $this->strHost
n"
- echo "[포트] : $this->intPort
n"; echo "[이메일] : $this->strEmail n"
- echo "[비밀번호] : ********
n"
- > }
- //연결 정보 출력
- function printConnect()
- {
- echo "[Connect] : $this->resHandler
n"
- echo "[ 요청 ] : $this->strRequest
n";
- echo "[응답] : $this->strResponse
n";
- 종료;
- }
- }
- ?>
-
-
-
- 코드 복사
-
-
- 통화 예:
//테스트 코드//예: $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(); > ;printObject();
- */
- ?>
-
-
- 코드 복사
-
-
-
-
|