• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/lib/helper/mailbox.php
  • Класс: BitrixMailHelperMailbox
  • Вызов: Mailbox::syncOutgoing
public function syncOutgoing()
{
	$res = $this->listMessages(
		array(
			'runtime' => array(
				new BitrixMainEntityReferenceField(
					'UPLOAD_QUEUE',
					'BitrixMailInternalsMessageUploadQueueTable',
					array(
						'=this.ID' => 'ref.ID',
						'=this.MAILBOX_ID' => 'ref.MAILBOX_ID',
					),
					array(
						'join_type' => 'INNER',
					)
				),
			),
			'select' => array(
				'*',
				'__' => 'MESSAGE.*',
				'UPLOAD_LOCK' => 'UPLOAD_QUEUE.SYNC_LOCK',
				'UPLOAD_STAGE' => 'UPLOAD_QUEUE.SYNC_STAGE',
				'UPLOAD_ATTEMPTS' => 'UPLOAD_QUEUE.ATTEMPTS',
			),
			'filter' => array(
				'>=UPLOAD_QUEUE.SYNC_STAGE' => 0,
				' time() - static::getTimeout(),
				' 5,
			),
			'order' => array(
				'UPLOAD_QUEUE.SYNC_LOCK' => 'ASC',
				'UPLOAD_QUEUE.SYNC_STAGE' => 'ASC',
				'UPLOAD_QUEUE.ATTEMPTS' => 'ASC',
			),
		),
		false
	);

	while ($excerpt = $res->fetch())
	{
		$n = $excerpt['UPLOAD_ATTEMPTS'] + 1;
		$interval = min(static::getTimeout() * pow($n, $n), 3600 * 24 * 7);

		if ($excerpt['UPLOAD_LOCK'] > time() - $interval)
		{
			continue;
		}

		$this->syncOutgoingMessage($excerpt);

		if ($this->isTimeQuotaExceeded())
		{
			break;
		}
	}
}