pop3.php
上传用户:gzy2002
上传日期:2010-02-11
资源大小:1785k
文件大小:5k
源码类别:

电子政务应用

开发平台:

Java

  1. <?php
  2. // +-------------------------------------------------------------+
  3. // | DeskPRO v [2.0.1 Production]
  4. // | Copyright (C) 2001 - 2004 Headstart Solutions Limited
  5. // | Supplied by WTN-WDYL
  6. // | Nullified by WTN-WDYL
  7. // | Distribution via WebForum, ForumRU and associated file dumps
  8. // +-------------------------------------------------------------+
  9. // | DESKPRO IS NOT FREE SOFTWARE
  10. // +-------------------------------------------------------------+
  11. // | License ID : Full Enterprise License =) ...
  12. // | License Owner : WTN-WDYL Team
  13. // +-------------------------------------------------------------+
  14. // | $RCSfile: pop3.php,v $
  15. // | $Date: 2004/02/10 01:34:25 $
  16. // | $Revision: 1.5 $
  17. // +-------------------------------------------------------------+
  18. // | File Details:
  19. // | - POP3 mail fetching module
  20. // +-------------------------------------------------------------+
  21. error_reporting(E_ALL ^ E_NOTICE);
  22. class POP_Socket {
  23. var $fp = null;
  24. var $connected = false;
  25. var $serverinfo = array();
  26. var $encrypted = false;
  27. var $msgNums = array();
  28. var $msgIDs = array();
  29. // Sets up the server information array
  30. function POP_Socket($info, $enc = false) {
  31. $this->serverinfo = $info;
  32. $this->encrypted = $enc;
  33. }
  34. // Connect to the server
  35. function connect() {
  36. $this->fp = fsockopen($this->serverinfo['server'], $this->serverinfo['port'], $error_no, $error_str);
  37. if (!is_resource($this->fp)) {
  38. $this->error(101);
  39. return false;
  40. }
  41. $this->connected = true;
  42. $buffer = fgets($this->fp, 4096);
  43. if (substr($buffer, 0, 3) != '+OK') {
  44. $this->error(101);
  45. $this->close();
  46. return false;
  47. } else {
  48. return true;
  49. }
  50. }
  51. // Login to the server
  52. function auth() {
  53. if (!is_resource($this->fp) and $this->connect() === false) {
  54. return false;
  55. }
  56. fputs($this->fp, 'USER '.$this->serverinfo['username']."rn");
  57. $buffer = fgets($this->fp, 4096);
  58. if (substr($buffer, 0, 3) != '+OK') {
  59. $this->close();
  60. return false;
  61. }
  62. if ($this->encrypted) {
  63. fputs($this->fp, 'PASS '.pop_decrypt($this->serverinfo['password'])."rn");
  64. } else {
  65. fputs($this->fp, 'PASS '.$this->serverinfo['password']."rn");
  66. }
  67. $buffer = fgets($this->fp, 4096);
  68. if (substr($buffer, 0, 3) != '+OK') {
  69. $this->error(102);
  70. $this->close();
  71. return false;
  72. } else {
  73. return true;
  74. }
  75. }
  76. // Get the list of messages and their ID's
  77. function get_list() {
  78. fputs($this->fp, "LISTrn");
  79. if (substr(fgets($this->fp, 4096), 0, 3) != '+OK') {
  80. $this->close();
  81. return false;
  82. }
  83. // Store the message numbers and sizes
  84. $buffer = fgets($this->fp, 4096);
  85. while ($buffer != ".rn") {
  86. $msginfo = explode(' ', $buffer);
  87. $this->msgNums[(trim($msginfo[0]))] = trim($msginfo[1]);
  88. $buffer = fgets($this->fp, 4096);
  89. }
  90. return true;
  91. }
  92. // Gets email number $msgnum from the server
  93. function get_email($msgnum, &$source, $stopat = '', $onelineonly = false) {
  94. $this->get_data("RETR $msgnumrn", $source, $stopat, $onelineonly);
  95. }
  96. // Gets the top $lines from the message
  97. function get_top($msgnum, &$source, $lines = 0, $stopat = '', $onelineonly = false) {
  98. $this->get_data("TOP $msgnum $linesrn", $source, $stopat, $onelineonly);
  99. }
  100. // Issues $command and returns the output
  101. function get_data($command, &$source, $stopat = '', $onelineonly = false) {
  102. fputs($this->fp, $command);
  103. if (substr(fgets($this->fp, 4096), 0, 3) != '+OK') {
  104. return false;
  105. }
  106. $source = '';
  107. $buffer = fgets($this->fp, 4096);
  108. while ($buffer != ".rn") {
  109. if (!$onelineonly) {
  110. $source .= $buffer;
  111. }
  112. if (!empty($stopat) and strtolower(substr($buffer, 0, strlen($stopat))) == strtolower($stopat)) {
  113. // We're doing this "weirdly" because we still have to fgets() the rest of the buffer
  114. if ($onelineonly) {
  115. $source = $buffer;
  116. $stopat = '';
  117. } else {
  118. $onelineonly = true;
  119. $stopat = '';
  120. }
  121. }
  122. $buffer = fgets($this->fp, 4096);
  123. }
  124. return true;
  125. }
  126. // Delete message number $msgnum from the server
  127. function delete_email($msgnum) {
  128. fputs($this->fp, "DELE $msgnumrn");
  129. if (substr(fgets($this->fp, 4096), 0, 3) != '+OK') {
  130. return false;
  131. } else {
  132. return true;
  133. }
  134. }
  135. // Close connection to the server
  136. function close() {
  137. if ($this->connected == true and is_resource($this->fp)) {
  138. $this->connected = false;
  139. fputs($this->fp, "QUITrn");
  140. fclose($this->fp);
  141. }
  142. }
  143. function error($error) {
  144. $this->errorval = $error;
  145. }
  146. function error_num() {
  147. return $this->errorval;
  148. }
  149. }