Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 3.11.x will end 14 Nov 2022 (12 months plus 6 months extension).
  • Bug fixes for security issues in 3.11.x will end 13 Nov 2023 (18 months plus 12 months extension).
  • PHP version: minimum PHP 7.3.0 Note: minimum PHP version has increased since Moodle 3.10. PHP 7.4.x is supported too.
   1  <?php
   2  /**
   3   * Copyright 2013-2017 Horde LLC (http://www.horde.org/)
   4   *
   5   * See the enclosed file LICENSE for license information (LGPL). If you
   6   * did not receive this file, see http://www.horde.org/licenses/lgpl21.
   7   *
   8   * @category  Horde
   9   * @copyright 2013-2017 Horde LLC
  10   * @license   http://www.horde.org/licenses/lgpl21 LGPL 2.1
  11   * @package   Imap_Client
  12   */
  13  
  14  /**
  15   * PHP stream connection to the POP3 server.
  16   *
  17   * NOTE: This class is NOT intended to be accessed outside of the package.
  18   * There is NO guarantees that the API of this class will not change across
  19   * versions.
  20   *
  21   * @author    Michael Slusarz <slusarz@horde.org>
  22   * @category  Horde
  23   * @copyright 2013-2017 Horde LLC
  24   * @internal
  25   * @license   http://www.horde.org/licenses/lgpl21 LGPL 2.1
  26   * @package   Imap_Client
  27   */
  28  class Horde_Imap_Client_Socket_Connection_Pop3
  29  extends Horde_Imap_Client_Socket_Connection_Base
  30  {
  31      /**
  32       */
  33      protected $_protocol = 'pop3';
  34  
  35      /**
  36       * Writes data to the POP3 output stream.
  37       *
  38       * @param string $data    String data.
  39       * @param boolean $debug  Output line to debug?
  40       *
  41       * @throws Horde_Imap_Client_Exception
  42       */
  43      public function write($data, $debug = true)
  44      {
  45          if (fwrite($this->_stream, $data . "\r\n") === false) {
  46              throw new Horde_Imap_Client_Exception(
  47                  Horde_Imap_Client_Translation::r("Server write error."),
  48                  Horde_Imap_Client_Exception::SERVER_WRITEERROR
  49              );
  50          }
  51  
  52          if ($debug) {
  53              $this->_params['debug']->client($data);
  54          }
  55      }
  56  
  57      /**
  58       * Read data from incoming POP3 stream.
  59       *
  60       * @param integer $size  UNUSED: The number of bytes to read from the
  61       *                       socket.
  62       *
  63       * @return string  Line of data.
  64       *
  65       * @throws Horde_Imap_Client_Exception
  66       */
  67      public function read($size = null)
  68      {
  69          if (feof($this->_stream)) {
  70              $this->close();
  71              $this->_params['debug']->info(
  72                  'ERROR: Server closed the connection.'
  73              );
  74              throw new Horde_Imap_Client_Exception(
  75                  Horde_Imap_Client_Translation::r("Server closed the connection unexpectedly."),
  76                  Horde_Imap_Client_Exception::DISCONNECT
  77              );
  78          }
  79  
  80          if (($read = fgets($this->_stream)) === false) {
  81              $this->_params['debug']->info('ERROR: read/timeout error.');
  82              throw new Horde_Imap_Client_Exception(
  83                  Horde_Imap_Client_Translation::r("Error when communicating with the mail server."),
  84                  Horde_Imap_Client_Exception::SERVER_READERROR
  85              );
  86          }
  87  
  88          $this->_params['debug']->server(rtrim($read, "\r\n"));
  89  
  90          return $read;
  91      }
  92  
  93  }