Управление очередью сообщений в Postfix
Доброго дня дорогие читатели. Использую в своей работе почтовые сервера на postfix. Приведу тут пожалуй самые часто используемые команды. Управление очередью сообщений Postfix нужны как говорится на каждый день. Итак приступим.
Просмотр и отправка сообщений
Вывести список писем в очереди
mailq
или второй вариант
postqueue -p
Список сообщений выводится в формате таблицы. Слева направо: уникальный код сообщения, размер сообщения, дата и время постановки сообщения в очередь. На следующей строке адрес сервера получателя и состояние отправки. Последней строчкой идет адрес получателя.
Команда 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 где есть много информации на английском языке. Следите за нашим почтовым разделом, будет много интересного.
Добрый день, можно как-то посмотреть все письма от одного отправителя?
Добрый, я обычно делаю так mailq|grep pismo@test.ru
Спасибо
Добрый день.
А как перенаправить сообщение на другой smtp?
Допустим в очереди есть сообщение которое было отправлено на домен имеющий две MX записи, при этом один из указанных MX стал недоступен и соединения на него не принимаются. Сообщение зависло в очереди со статусом “connection timed out”, при этом второй узел доступен и готов принимать сообщения.
Добрый, повторную отправку сообщения пробовали? postsuper -r <идентификатор>
Попробовал: создается новый идентификатор, но сообщение отправляется все туда же. MX preference явно указывает, что нужно отправлять на другой адрес, но при повторной отправке как и раньше шлет на старый. DNS кэш пробовал очищать рестартом dnsmasq. Не помогает.
Использую Zimbra OSE 8.8.15_GA_3901
Перезапуск MTA не помогает.
Что-то странное. Потому что создав новый идентификатор он по сути заново пытается отправить вновь запрашивая все записи, тем более после перезапуска сервера кеш чистится. Можно пример лога?
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)
Если сейчас отправить новое сообщение а адрес akson.ru оно идет на нужный сервер?
Нашел в чем причина.
При отправке письма этому адресату происходит соединение с правильным 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)
Спасибо!
Поздравляю, пожалуйста