Управление очередью сообщений в Postfix

Доброго дня дорогие читатели. Использую в своей работе почтовые сервера на postfix. Приведу тут пожалуй самые часто используемые команды. Управление очередью сообщений Postfix нужны как говорится на каждый день. Итак приступим.

Просмотр и отправка сообщений

Вывести список писем в очереди
mailq

или второй вариант

postqueue -p

Список сообщений выводится в формате таблицы. Слева направо: уникальный код сообщения, размер сообщения, дата и время постановки сообщения в очередь. На следующей строке адрес сервера получателя и состояние отправки. Последней строчкой идет адрес получателя.

Пример сообщения в очереди Postfix

Команда mailq выводит все сообщения в очереди полным списком. По окончании вывода внизу указывается строка с объемом всех сообщений в очереди и их количеством. В примере ниже видно, что в очереди находится 52 сообщения общим объемом 26834 Кбайт.

-- 26834 Kbytes in 52 Requests.

Для быстрой проверки количества сообщений в очереди можно использовать grep

mailq|grep Requests

И на выходе получим одну строчку с количеством сообщений в очереди и их объемом.

Вывести всю информацию по сообщению в очереди
postcat -q <идентификатор>

<идентификатор> – уникальный код сообщения, который можно увидеть если ввести команду mailq. Данная команда позволяет более детально разобраться почему еще не отправлено указанное сообщение.

Принудительная отправка всех сообщений в очереди
mailq -q

либо команда

postqueue -f

После этой команды будет предпринята повторная попытка отправить все сообщения в очереди.

Принудительная отправка сообщения в очереди с указанным идентификатором
postsuper -r <идентификатор>
Перезапуск очереди для повторной обработки сообщений
postsuper -r ALL
Принудительная отправка сообщений в очереди относящихся к определенному домену
postqueue -s newadmin.ru
Установка периодичности повторной отправки сообщений
postconf -e "queue_run_delay = 20m"

где 20m – количество минут.

Установка времени приостановки отправки сообщений

Сообщения не отправленные по причине временных неисправностей. Например принимающий сервер не отвечает или просит повторить запрос позже и т.п. Такое поведение также применяет для фильтрации СПАМа greylist

postconf -e "minimal_backoff_time = 20m"
postconf -e "maximal_backoff_time = 60m"

где minimal_backoff_time – минимальное время
maximal_backoff_time – максимальное время

Установить время до удаления сообщения из очереди

Это время в течении которого postfix будет пытаться отправить сообщение. После окончания указанного периода сообщение будет безвозвратно удалено. В примере указано 2d – тоесть два дня

postconf -e "maximal_queue_lifetime = 2d"

После изменения в конфигурации Postfix не забываем перезагружать сервис для применения настроек

systemctl restart postfix

Удаление сообщений

Удалить письмо из очереди

Удалить письмо из очереди можно по его идентификатору, его можно узнать используя команду mailq. Подробнее можно прочитать выше.

postsuper -d <идентификатор>
Удалить все сообщения
postsuper -d ALL
Удалить все сообщения по определенному отправителю
mailq | tail -n +2 | awk 'BEGIN { RS = "" } /spamer.ru$/ { print $1 }' | tr -d '*!' | postsuper -d -

где spamer.ru – домен по которому будет произведено удаление. Если необходимо удалить письма с конкретного адреса, то вместо домена указываем точный адрес. Например: spam@spamer.ru

И напоследок, список директорий где Postfix хранит сообщения в очереди пока их не отправит, либо не удалит.

/var/spool/postfix/deferred
/var/spool/postfix/active
/var/spool/postfix/incoming
/var/spool/postfix/defer

Управление очередью сообщений Postfix можно автоматизировать. В дальнейшем рассмотрим скрипты на данную тему.

Официальный сайт Postfix где есть много информации на английском языке. Следите за нашим почтовым разделом, будет много интересного.

11 thoughts on “Управление очередью сообщений в Postfix

  • 27 мая, 2020 в 06:34
    Permalink

    Добрый день, можно как-то посмотреть все письма от одного отправителя?

    Ответ
  • 16 сентября, 2020 в 06:50
    Permalink

    Добрый день.
    А как перенаправить сообщение на другой smtp?
    Допустим в очереди есть сообщение которое было отправлено на домен имеющий две MX записи, при этом один из указанных MX стал недоступен и соединения на него не принимаются. Сообщение зависло в очереди со статусом “connection timed out”, при этом второй узел доступен и готов принимать сообщения.

    Ответ
    • 16 сентября, 2020 в 07:18
      Permalink

      Добрый, повторную отправку сообщения пробовали? postsuper -r <идентификатор>

      Ответ
      • 16 сентября, 2020 в 10:48
        Permalink

        Попробовал: создается новый идентификатор, но сообщение отправляется все туда же. MX preference явно указывает, что нужно отправлять на другой адрес, но при повторной отправке как и раньше шлет на старый. DNS кэш пробовал очищать рестартом dnsmasq. Не помогает.
        Использую Zimbra OSE 8.8.15_GA_3901
        Перезапуск MTA не помогает.

        Ответ
        • 16 сентября, 2020 в 11:07
          Permalink

          Что-то странное. Потому что создав новый идентификатор он по сути заново пытается отправить вновь запрашивая все записи, тем более после перезапуска сервера кеш чистится. Можно пример лога?

          Ответ
  • 16 сентября, 2020 в 11:51
    Permalink

    6C85A1FE0A77 842336 Wed Sep 16 07:38:16 @
    (connect to mail2.akson.ru[79.175.40.191]:25: Connection timed out)
    @akson.ru

    219411FE0A8C 840673 Wed Sep 16 07:54:06 @
    (connect to mail2.akson.ru[79.175.40.191]:25: Connection timed out)
    @akson.ru

    # nslookup -type=MX akson.ru
    Server: 127.0.0.1
    Address: 127.0.0.1#53

    Non-authoritative answer:
    akson.ru mail exchanger = 10 mail.akson.ru.
    akson.ru mail exchanger = 1000 mail2.akson.ru.

    Authoritative answers can be found from:
    mail.akson.ru internet address = 134.19.150.100
    mail2.akson.ru internet address = 79.175.40.191

    Сообщение 219411FE0A8C было создано заново и отправлено после обнаружения застрявшего.

    Sep 16 09:43:35 zcs20 postfix/smtp[27197]: connect to mail2.akson.ru[79.175.40.191]:25: Connection timed out
    Sep 16 09:43:35 zcs20 postfix/smtp[27197]: 90DB31FE0C42: to=<@akson.ru>, relay=none, delay=619, delays=589/0.01/30/0, dsn=4.4.1, status=deferred (connect to mail2.akson.ru[79.175.40.191]:25: Connection timed out)

    Ответ
    • 16 сентября, 2020 в 12:13
      Permalink

      Если сейчас отправить новое сообщение а адрес akson.ru оно идет на нужный сервер?

      Ответ
  • 16 сентября, 2020 в 13:17
    Permalink

    Нашел в чем причина.
    При отправке письма этому адресату происходит соединение с правильным MX mail.akson.ru, но он отвечает User doesn’t exist.
    Следом начинается попытка установить соединение с MX mail2.akson.ru и тут сообщение подвисает в очереди так как Connection timed out.
    Sep 16 13:09:31 zcs20 postfix/smtp[14680]: DB7281FE0CE9: to=, relay=127.0.0.1[127.0.0.1]:10032, delay=0.15, delays=0.05/0.01/0.01/0.08, dsn=2.0.0, status=sent (250 2.0.0 from MTA(smtp:[127.0.0.1]:10025): 250 2.0.0 Ok: queued as 070031FE0CED)
    Sep 16 13:09:31 zcs20 postfix/smtp[18821]: 070031FE0CED: host mail.akson.ru[134.19.150.100] said: 450 4.1.1 : Recipient address rejected: unverified address: host mail.akson.ru[private/dovecot-lmtp] said: 550 5.1.1 kolotaevea@akson.ru> User doesn’t exist: kolotaevea@akson.ru (in reply to RCPT TO command) (in reply to RCPT TO command)
    Sep 16 13:10:01 zcs20 postfix/smtp[18821]: 070031FE0CED: to=, relay=none, delay=30, delays=0.01/0/30/0, dsn=4.4.1, status=deferred (connect to mail2.akson.ru[79.175.40.191]:25: Connection timed out)

    Спасибо!

    Ответ
    • 16 сентября, 2020 в 13:20
      Permalink

      Поздравляю, пожалуйста

      Ответ

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *