• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/imap.php
  • Класс: BitrixMailImap
  • Вызов: Imap::listMessages
public function listMessages($mailbox, &$uidtoken, &$error)
{
	$error = null;

	$params = array(
		'offset' => 0,
		'limit'  => -1,
	);

	if (is_array($mailbox))
	{
		$params  = array_merge($params, $mailbox);
		$mailbox = $mailbox['mailbox'];
	}

	if (!($params['offset'] > 0))
	{
		$params['offset'] = 0;
	}

	if (!($params['limit'] > 0))
	{
		$params['limit'] = -1;
	}

	if (!$this->select($mailbox, $error))
	{
		return false;
	}

	if (!($this->sessMailbox['exists'] > 0) || $params['offset'] + 1 > $this->sessMailbox['exists'])
	{
		return array();
	}

	if ($params['limit'] > 0 && $params['offset'] + $params['limit'] > $this->sessMailbox['exists'])
	{
		$params['limit'] = $this->sessMailbox['exists'] - $params['offset'];
	}

	$uidtoken = $this->sessMailbox['uidvalidity'];

	$list = $this->fetch(
		false,
		$mailbox,
		sprintf(
			'%u:%s',
			$params['offset'] + 1,
			$params['limit'] > 0 ? (int) ($params['offset']+$params['limit']) : '*'
		),
		array_merge(
			!is_null($uidtoken) ? array('UID') : array(),
			array('INTERNALDATE', 'RFC822.SIZE', 'FLAGS')
		),
		$error
	);

	foreach ($list as $id => $data)
	{
		$list[$id] = array(
			'id'    => $id,
			'uid'   => array_key_exists('UID', $data) ? $data['UID'] : null,
			'date'  => array_key_exists('INTERNALDATE', $data) ? $data['INTERNALDATE'] : null,
			'size'  => array_key_exists('RFC822.SIZE', $data) ? $data['RFC822.SIZE'] : null,
			'flags' => array_key_exists('FLAGS', $data) ? $data['FLAGS'] : array(),
		);
	}

	$list = array_filter(
		$list,
		function ($item)
		{
			return isset($item['date'], $item['size'], $item['flags']);
		}
	);

	return $list;
}