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.
<?php
/**
 * Copyright 2012-2017 Horde LLC (http://www.horde.org/)
 *
 * See the enclosed file LICENSE for license information (BSD). If you
 * did not receive this file, see http://www.horde.org/licenses/bsd.
 *
 * @category  Horde
 * @copyright 2012-2017 Horde LLC
 * @license   http://www.horde.org/licenses/bsd New BSD License
 * @package   Mail
 */

/**
 * Class to parse identification headers (RFC 5322 [3.6.4]): Message-ID,
 * References, and In-Reply-To.
 *
 * @author    Michael Slusarz <slusarz@horde.org>
 * @category  Horde
 * @copyright 2012-2017 Horde LLC
 * @license   http://www.horde.org/licenses/bsd New BSD License
 * @package   Mail
 * @since     2.2.0
 */
class Horde_Mail_Rfc822_Identification extends Horde_Mail_Rfc822
{
    /**
     * List of message IDs parsed.
     *
     * @var array
     */
    public $ids = array();

    /**
     * Constructor.
     *
     * @param string $value  Identification field value to parse.
     */
    public function __construct($value = null)
    {
        $this->parse($value);
    }

    /**
     * Parse an identification header.
     *
< * @param string $value Identification field value to parse.
> * @param string|null $value Identification field value to parse.
*/ public function parse($value) {
< if (!strlen($value)) {
> if (empty($value)) {
return; } $this->_data = $value; $this->_datalen = strlen($value); $this->_params['validate'] = true; $this->_ptr = 0; $this->_rfc822SkipLwsp(); while ($this->_curr() !== false) { try { $this->ids[] = $this->_parseMessageId(); } catch (Horde_Mail_Exception $e) { break; } // Some mailers incorrectly insert commas between reference items if ($this->_curr() == ',') { $this->_rfc822SkipLwsp(true); } } } /** * Message IDs are defined in RFC 5322 [3.6.4]. In short, they can only * contain one '@' character. However, Outlook can produce invalid * Message-IDs containing multiple '@' characters, which will fail the * strict RFC checks. * * Since we don't care about the structure/details of the Message-ID, * just do a basic parse that considers all characters inside of angled * brackets to be valid. * * @return string A full Message-ID (enclosed in angled brackets). * * @throws Horde_Mail_Exception */ private function _parseMessageId() { $bracket = ($this->_curr(true) === '<'); $str = '<'; while (($chr = $this->_curr(true)) !== false) { if ($bracket) { $str .= $chr; if ($chr == '>') { $this->_rfc822SkipLwsp(); return $str; } } else { if (!strcspn($chr, " \n\r\t,")) { $this->_rfc822SkipLwsp(); return $str; } $str .= $chr; } } if (!$bracket) { return $str; } throw new Horde_Mail_Exception('Invalid Message-ID.'); } }