Вывести адрес, не отбив писем

Порядок, при котором очередь успевает опустеть

Задача. План прогрева закончился, адрес возвращается хостеру или прокси снимается — и адрес отправки надо убрать с узла, где на нём, возможно, ещё стоит почта.

Из чего складывается:

  • 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'
Пустой вывод первой команды — блок можно удалять и перечитывать конфигурацию; иначе — ждать или перенаправить.
жёлтым — — имена директив, голубым — блоки. Так же они подсвечены и в тексте карточки.
Совместимость
PowerMTA 6.0
описана в руководстве этой версии · платформа: любая
С какой версии директива доступна, вендор указывает не для всех — здесь пометки нет. Имя встречается и в издании руководства 5.0.
Как проверить на узле
После удаления проверить, не отбил ли узел письма сам:
grep -c 'no such virtual MTA' /var/log/pmta/acct-*.csv
Ненулевое число — письма отбиты удалением адреса, а не приёмником; их адреса нельзя вносить в подавление.