@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at upstream/main 398 lines 10 kB view raw
1<?php 2/*~ class.pop3.php 3.---------------------------------------------------------------------------. 4| Software: PHPMailer - PHP email class | 5| Version: 5.1 | 6| Contact: via sourceforge.net support pages (also www.codeworxtech.com) | 7| Info: http://phpmailer.sourceforge.net | 8| Support: http://sourceforge.net/projects/phpmailer/ | 9| ------------------------------------------------------------------------- | 10| Admin: Andy Prevost (project admininistrator) | 11| Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net | 12| : Marcus Bointon (coolbru) coolbru@users.sourceforge.net | 13| Founder: Brent R. Matzelle (original founder) | 14| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. | 15| Copyright (c) 2001-2003, Brent R. Matzelle | 16| ------------------------------------------------------------------------- | 17| License: Distributed under the Lesser General Public License (LGPL) | 18| http://www.gnu.org/copyleft/lesser.html | 19| This program is distributed in the hope that it will be useful - WITHOUT | 20| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | 21| FITNESS FOR A PARTICULAR PURPOSE. | 22| ------------------------------------------------------------------------- | 23| We offer a number of paid services (www.codeworxtech.com): | 24| - Web Hosting on highly optimized fast and secure servers | 25| - Technology Consulting | 26| - Oursourcing (highly qualified programmers and graphic designers) | 27'---------------------------------------------------------------------------' 28*/ 29 30/** 31 * PHPMailer - PHP POP Before SMTP Authentication Class 32 * NOTE: Designed for use with PHP version 5 and up 33 * @package PHPMailer 34 * @author Andy Prevost 35 * @author Marcus Bointon 36 * @copyright 2004 - 2009 Andy Prevost 37 * @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL) 38 * @version $Id: class.pop3.php 444 2009-05-05 11:22:26Z coolbru $ 39 */ 40 41/** 42 * POP Before SMTP Authentication Class 43 * Version 5.0.0 44 * 45 * Author: Richard Davey (rich@corephp.co.uk) 46 * Modifications: Andy Prevost 47 * License: LGPL, see PHPMailer License 48 * 49 * Specifically for PHPMailer to allow POP before SMTP authentication. 50 * Does not yet work with APOP - if you have an APOP account, contact Richard Davey 51 * and we can test changes to this script. 52 * 53 * This class is based on the structure of the SMTP class originally authored by Chris Ryan 54 * 55 * This class is rfc 1939 compliant and implements all the commands 56 * required for POP3 connection, authentication and disconnection. 57 * 58 * @package PHPMailer 59 * @author Richard Davey 60 */ 61 62class POP3 { 63 /** 64 * Default POP3 port 65 * @var int 66 */ 67 public $POP3_PORT = 110; 68 69 /** 70 * Default Timeout 71 * @var int 72 */ 73 public $POP3_TIMEOUT = 30; 74 75 /** 76 * POP3 Carriage Return + Line Feed 77 * @var string 78 */ 79 public $CRLF = "\r\n"; 80 81 /** 82 * Displaying Debug warnings? (0 = now, 1+ = yes) 83 * @var int 84 */ 85 public $do_debug = 2; 86 87 /** 88 * POP3 Mail Server 89 * @var string 90 */ 91 public $host; 92 93 /** 94 * POP3 Port 95 * @var int 96 */ 97 public $port; 98 99 /** 100 * POP3 Timeout Value 101 * @var int 102 */ 103 public $tval; 104 105 /** 106 * POP3 Username 107 * @var string 108 */ 109 public $username; 110 111 /** 112 * POP3 Password 113 * @var string 114 */ 115 public $password; 116 117 ///////////////////////////////////////////////// 118 // PROPERTIES, PRIVATE AND PROTECTED 119 ///////////////////////////////////////////////// 120 121 private $pop_conn; 122 private $connected; 123 private $error; // Error log array 124 125 /** 126 * Constructor, sets the initial values 127 * @access public 128 * @return POP3 129 */ 130 public function __construct() { 131 $this->pop_conn = 0; 132 $this->connected = false; 133 $this->error = null; 134 } 135 136 /** 137 * Combination of public events - connect, login, disconnect 138 * @access public 139 * @param string $host 140 * @param integer $port 141 * @param integer $tval 142 * @param string $username 143 * @param string $password 144 */ 145 public function Authorise ($host, $port = false, $tval = false, $username = '', $password = '', $debug_level = 0) { 146 $this->host = $host; 147 148 // If no port value is passed, retrieve it 149 if ($port == false) { 150 $this->port = $this->POP3_PORT; 151 } else { 152 $this->port = $port; 153 } 154 155 // If no port value is passed, retrieve it 156 if ($tval == false) { 157 $this->tval = $this->POP3_TIMEOUT; 158 } else { 159 $this->tval = $tval; 160 } 161 162 $this->do_debug = $debug_level; 163 $this->username = $username; 164 $this->password = $password; 165 166 // Refresh the error log 167 $this->error = null; 168 169 // Connect 170 $result = $this->Connect($this->host, $this->port, $this->tval); 171 172 if ($result) { 173 $login_result = $this->Login($this->username, $this->password); 174 175 if ($login_result) { 176 $this->Disconnect(); 177 178 return true; 179 } 180 181 } 182 183 // We need to disconnect regardless if the login succeeded 184 $this->Disconnect(); 185 186 return false; 187 } 188 189 /** 190 * Connect to the POP3 server 191 * @access public 192 * @param string $host 193 * @param integer $port 194 * @param integer $tval 195 * @return boolean 196 */ 197 public function Connect ($host, $port = false, $tval = 30) { 198 // Are we already connected? 199 if ($this->connected) { 200 return true; 201 } 202 203 /* 204 On Windows this will raise a PHP Warning error if the hostname doesn't exist. 205 Rather than supress it with @fsockopen, let's capture it cleanly instead 206 */ 207 208 set_error_handler(array(&$this, 'catchWarning')); 209 210 // Connect to the POP3 server 211 $this->pop_conn = fsockopen($host, // POP3 Host 212 $port, // Port # 213 $errno, // Error Number 214 $errstr, // Error Message 215 $tval); // Timeout (seconds) 216 217 // Restore the error handler 218 restore_error_handler(); 219 220 // Does the Error Log now contain anything? 221 if ($this->error && $this->do_debug >= 1) { 222 $this->displayErrors(); 223 } 224 225 // Did we connect? 226 if ($this->pop_conn == false) { 227 // It would appear not... 228 $this->error = array( 229 'error' => "Failed to connect to server $host on port $port", 230 'errno' => $errno, 231 'errstr' => $errstr 232 ); 233 234 if ($this->do_debug >= 1) { 235 $this->displayErrors(); 236 } 237 238 return false; 239 } 240 241 // Increase the stream time-out 242 stream_set_timeout($this->pop_conn, $tval, 0); 243 244 // Get the POP3 server response 245 $pop3_response = $this->getResponse(); 246 247 // Check for the +OK 248 if ($this->checkResponse($pop3_response)) { 249 // The connection is established and the POP3 server is talking 250 $this->connected = true; 251 return true; 252 } 253 254 } 255 256 /** 257 * Login to the POP3 server (does not support APOP yet) 258 * @access public 259 * @param string $username 260 * @param string $password 261 * @return boolean 262 */ 263 public function Login ($username = '', $password = '') { 264 if ($this->connected == false) { 265 $this->error = 'Not connected to POP3 server'; 266 267 if ($this->do_debug >= 1) { 268 $this->displayErrors(); 269 } 270 } 271 272 if (empty($username)) { 273 $username = $this->username; 274 } 275 276 if (empty($password)) { 277 $password = $this->password; 278 } 279 280 $pop_username = "USER $username" . $this->CRLF; 281 $pop_password = "PASS $password" . $this->CRLF; 282 283 // Send the Username 284 $this->sendString($pop_username); 285 $pop3_response = $this->getResponse(); 286 287 if ($this->checkResponse($pop3_response)) { 288 // Send the Password 289 $this->sendString($pop_password); 290 $pop3_response = $this->getResponse(); 291 292 if ($this->checkResponse($pop3_response)) { 293 return true; 294 } else { 295 return false; 296 } 297 } else { 298 return false; 299 } 300 } 301 302 /** 303 * Disconnect from the POP3 server 304 * @access public 305 */ 306 public function Disconnect () { 307 $this->sendString('QUIT'); 308 309 fclose($this->pop_conn); 310 } 311 312 ///////////////////////////////////////////////// 313 // Private Methods 314 ///////////////////////////////////////////////// 315 316 /** 317 * Get the socket response back. 318 * $size is the maximum number of bytes to retrieve 319 * @access private 320 * @param integer $size 321 * @return string 322 */ 323 private function getResponse ($size = 128) { 324 $pop3_response = fgets($this->pop_conn, $size); 325 326 return $pop3_response; 327 } 328 329 /** 330 * Send a string down the open socket connection to the POP3 server 331 * @access private 332 * @param string $string 333 * @return integer 334 */ 335 private function sendString ($string) { 336 $bytes_sent = fwrite($this->pop_conn, $string, strlen($string)); 337 338 return $bytes_sent; 339 } 340 341 /** 342 * Checks the POP3 server response for +OK or -ERR 343 * @access private 344 * @param string $string 345 * @return boolean 346 */ 347 private function checkResponse ($string) { 348 if (substr($string, 0, 3) !== '+OK') { 349 $this->error = array( 350 'error' => "Server reported an error: $string", 351 'errno' => 0, 352 'errstr' => '' 353 ); 354 355 if ($this->do_debug >= 1) { 356 $this->displayErrors(); 357 } 358 359 return false; 360 } else { 361 return true; 362 } 363 364 } 365 366 /** 367 * If debug is enabled, display the error message array 368 * @access private 369 */ 370 private function displayErrors () { 371 echo '<pre>'; 372 373 foreach ($this->error as $single_error) { 374 print_r($single_error); 375 } 376 377 echo '</pre>'; 378 } 379 380 /** 381 * Takes over from PHP for the socket warning handler 382 * @access private 383 * @param integer $errno 384 * @param string $errstr 385 * @param string $errfile 386 * @param integer $errline 387 */ 388 private function catchWarning ($errno, $errstr, $errfile, $errline) { 389 $this->error[] = array( 390 'error' => "Connecting to the POP3 server raised a PHP warning: ", 391 'errno' => $errno, 392 'errstr' => $errstr 393 ); 394 } 395 396 // End of class 397} 398?>