[PLUGINS] +set de base
[lhc/web/www.git] / www / plugins / facteur / phpmailer-php5 / class.pop3.php
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
62 class 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
243 // Check for PHP 4.3.0 or later
244 if (version_compare(phpversion(), '5.0.0', 'ge')) {
245 stream_set_timeout($this->pop_conn, $tval, 0);
246 } else {
247 // Does not work on Windows
248 if (substr(PHP_OS, 0, 3) !== 'WIN') {
249 socket_set_timeout($this->pop_conn, $tval, 0);
250 }
251 }
252
253 // Get the POP3 server response
254 $pop3_response = $this->getResponse();
255
256 // Check for the +OK
257 if ($this->checkResponse($pop3_response)) {
258 // The connection is established and the POP3 server is talking
259 $this->connected = true;
260 return true;
261 }
262
263 }
264
265 /**
266 * Login to the POP3 server (does not support APOP yet)
267 * @access public
268 * @param string $username
269 * @param string $password
270 * @return boolean
271 */
272 public function Login ($username = '', $password = '') {
273 if ($this->connected == false) {
274 $this->error = 'Not connected to POP3 server';
275
276 if ($this->do_debug >= 1) {
277 $this->displayErrors();
278 }
279 }
280
281 if (empty($username)) {
282 $username = $this->username;
283 }
284
285 if (empty($password)) {
286 $password = $this->password;
287 }
288
289 $pop_username = "USER $username" . $this->CRLF;
290 $pop_password = "PASS $password" . $this->CRLF;
291
292 // Send the Username
293 $this->sendString($pop_username);
294 $pop3_response = $this->getResponse();
295
296 if ($this->checkResponse($pop3_response)) {
297 // Send the Password
298 $this->sendString($pop_password);
299 $pop3_response = $this->getResponse();
300
301 if ($this->checkResponse($pop3_response)) {
302 return true;
303 } else {
304 return false;
305 }
306 } else {
307 return false;
308 }
309 }
310
311 /**
312 * Disconnect from the POP3 server
313 * @access public
314 */
315 public function Disconnect () {
316 $this->sendString('QUIT');
317
318 fclose($this->pop_conn);
319 }
320
321 /////////////////////////////////////////////////
322 // Private Methods
323 /////////////////////////////////////////////////
324
325 /**
326 * Get the socket response back.
327 * $size is the maximum number of bytes to retrieve
328 * @access private
329 * @param integer $size
330 * @return string
331 */
332 private function getResponse ($size = 128) {
333 $pop3_response = fgets($this->pop_conn, $size);
334
335 return $pop3_response;
336 }
337
338 /**
339 * Send a string down the open socket connection to the POP3 server
340 * @access private
341 * @param string $string
342 * @return integer
343 */
344 private function sendString ($string) {
345 $bytes_sent = fwrite($this->pop_conn, $string, strlen($string));
346
347 return $bytes_sent;
348 }
349
350 /**
351 * Checks the POP3 server response for +OK or -ERR
352 * @access private
353 * @param string $string
354 * @return boolean
355 */
356 private function checkResponse ($string) {
357 if (substr($string, 0, 3) !== '+OK') {
358 $this->error = array(
359 'error' => "Server reported an error: $string",
360 'errno' => 0,
361 'errstr' => ''
362 );
363
364 if ($this->do_debug >= 1) {
365 $this->displayErrors();
366 }
367
368 return false;
369 } else {
370 return true;
371 }
372
373 }
374
375 /**
376 * If debug is enabled, display the error message array
377 * @access private
378 */
379 private function displayErrors () {
380 echo '<pre>';
381
382 foreach ($this->error as $single_error) {
383 print_r($single_error);
384 }
385
386 echo '</pre>';
387 }
388
389 /**
390 * Takes over from PHP for the socket warning handler
391 * @access private
392 * @param integer $errno
393 * @param string $errstr
394 * @param string $errfile
395 * @param integer $errline
396 */
397 private function catchWarning ($errno, $errstr, $errfile, $errline) {
398 $this->error[] = array(
399 'error' => "Connecting to the POP3 server raised a PHP warning: ",
400 'errno' => $errno,
401 'errstr' => $errstr
402 );
403 }
404
405 // End of class
406 }
407 ?>