Порядок, при котором очередь успевает опустеть
Задача. План прогрева закончился, адрес возвращается хостеру или прокси снимается — и адрес отправки надо убрать с узла, где на нём, возможно, ещё стоит почта.
Из чего складывается:
- show queues — держит ли какая-нибудь очередь почту этого адреса;
- pause queue — по желанию: остановить попытки, пока решается судьба писем;
- cancel-vmta — удалить определение, когда за адресом ничего нет;
- change-vmta-live — вместо удаления: сменить определение и сохранить почту в очереди.
Области у составляющих разные. Уровень узла и уровень адреса отправки. Проверка и удаление — разные операции с промежутком, и почта успевает прийти в него, если подача на адрес не остановлена заранее.
Как они взаимодействуют. Схема существует потому, что удаление отбивает всё, что осталось в очереди, кодом 5.3.5 (no such virtual MTA) — отказ рождается на нашем узле и выглядит как неудача доставки. Проверка — одна команда; перенаправление вместо удаления почту сохраняет. Порядок важен: остановить подачу, проверить, убрать.
Главная ловушка — удалить адрес с непустой очередью. Письма, уже выбравшие снятый адрес, не ждут и не уходят другим адресом, а отказывают кодом 5.3.5 (no such virtual MTA) — и классификатор примет их за отказы приёмника.
Что делает Хаб. Применяет наполовину. Очереди по адресам Хаб видит в мониторе, а «Пауза очереди» есть в разделе «Управление». Но адрес отправки с узла Хаб убирает не cancel-vmta и не перенаправлением, а перегенерацией: пара исчезает из файла адресов при следующем применении конфигурации.
Рекомендуемые значения
Порядок:
| Шаг |
Как |
Когда дальше |
| остановить подачу |
убрать правило выбора адреса |
новые письма на адрес не идут |
| проверить |
pmta show queues ‘*/vmta-old’ |
очередей с письмами нет |
| по желанию |
pmta pause queue ‘*/vmta-old’ |
пока решается, отправлять ли остаток |
| убрать |
удалить блок и pmta reload |
очередь пуста |
Удаление, смена на лету, код отказа и команды — из руководства (§ 9.5.1, § 9.5.2, § 6.3.14, § 6.3.25). Сама схема — наша гипотеза.
Пример в конфигурации
# остались ли письма у снимаемого адреса
pmta show queues '*/vmta-old'pmta pause queue '*/vmta-old'
Пустой вывод первой команды — блок можно удалять и перечитывать конфигурацию; иначе — ждать или перенаправить.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.