XF 2.1 Ограничить количество писем отправляемых за 1 раз

Статус
В этой теме нельзя размещать новые ответы.
Версия XenForo
v2.1.10

econaft

Проверенные
Сообщения
901
Реакции
80
Баллы
8,130
В 1.5, как я понял, была возможность ограничить число отправляемых писем за один раз.
  1. Можно ли это сделать в 2.1? И как?
  2. Сколько сейчас стоит по умолчанию в 2.1? 100 или 30?
  3. Что значит за один раз? Какой интервал времени между этими отправками?
 
econaft, а какая цель ?
отправка писем проходят в несколько этапов
сперва попадают в очередь отправки движка, потом хостера.
некоторые хостеры сами ограничивают кол-во отправляемых писем в час
 
econaft, а какая цель ?
отправка писем проходят в несколько этапов
сперва попадают в очередь отправки движка, потом хостера.
некоторые хостеры сами ограничивают кол-во отправляемых писем в час
Смысл в том, чтобы мне вложиться в лимит хостера на число отправляемых сообщений за 15 минут.
В 1.5 это делалось:
 
на число отправляемых сообщений за 15 минут.
Забилась очередь - прощай новые регистрации, ибо мало кто будет ждать подтверждение email при регистрации.
Такое себе решение.
 
  • Мне нравится
Реакции: Hope
Хостер разрешает в течение 15 минут рассылать 50 мэйлов.
Ну если хостер так сильно зажал лимиты, то для рассылки, как вариант использовать сторонний сервис
А так, да что-то мутить с очередью отправки в движке.
 
Сейчас в 2.1, когда я отправляю рассылку на 500 мэйлов, что происходит?
  1. Они все мгновенно рассылаются?
  2. Они становятся в некую очередь и рассылаются частями?
  3. Если частями, то с какой периодичностью и по сколько штук?
 
С какой периодичностью, по сколько штук.
Смотри код, вроде как /src/XF/Mail/Queue.php
PHP:
    public function run($maxRunTime)
    {
        $s = microtime(true);
        $db = $this->db;
        $mailer = \XF::mailer();

        do
        {
            $queue = $this->getQueue();

            foreach ($queue AS $id => $record)
            {
                $updated = $db->update('xf_mail_queue', [
                    'send_date' => time() + 15 * 60
                ], 'mail_queue_id = ? AND send_date = ?', [$id, $record['send_date']]);
                if (!$updated)
                {
                    // already been run recently
                    continue;
                }

                $message = @unserialize($record['mail_data']);
                if (!($message instanceof \Swift_Mime_Message))
                {
                    continue;
                }

                if ($mailer->send($message, null, $record))
                {
                    $this->db->delete('xf_mail_queue', 'mail_queue_id = ?', $record['mail_queue_id']);
                }

                if ($maxRunTime && microtime(true) - $s > $maxRunTime)
                {
                    break 2;
                }
            }
        }
        while ($queue);
    }

    public function getQueue($limit = 20)
    {
        $db = $this->db;

        return $db->fetchAllKeyed($db->limit('
            SELECT *
            FROM xf_mail_queue
            WHERE send_date <= ?
            ORDER BY send_date, queue_date
        ', $limit), 'mail_queue_id', [\XF::$time]);
    }
 
Последнее редактирование:
А с какой периодичностью?
Периодичность там вроде триггер run-jobs задаёт
Другими словами, если на страницы форума не будет обращений, то очередь двигаться не будет.
Но не уверен, давно в XF не тыкался.
 
Статус
В этой теме нельзя размещать новые ответы.
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу