- Работа с очередью сообщений в Postfix
- Посмотреть очередь
- Принудительно запустить отправку из очереди
- Очистить очередь
- Количество писем в очереди
- Перезапустить очередь
- Настройка очереди
- Информация о конкретном сообщении
- Удалить/Очистить/Сбросить очередь в postfix
- Просмотр сообщения (Содержимое, заголовок и тело)
- Удалить/Очистить/Сбросить очередь в postfix
- Управление очередью сообщений в Postfix
- Просмотр и отправка сообщений
- Удаление сообщений
- Вам также понравится
- Конвертация CRT в PFX
- Microsoft Exchange Server 2016 Cumulative Update 20
- Копирование сообщений в Postfix
Работа с очередью сообщений в Postfix
Обновлено: 11.03.2020 Опубликовано: 13.06.2017
Посмотреть очередь
Принудительно запустить отправку из очереди
Очистить очередь
2. Удалить определенное письмо из очереди:
* идентификатор письма можно увидеть командой mailq.
3. Очистить очередь по отправителю:
postqueue -p | tail -n +2 | awk ‘BEGIN < RS = "" >/spammer@email\.com/ < print $1 >‘ | tr -d ‘*!’ | postsuper -d —
* в данном примере мы удалим все письма от spammer@email.com.
Количество писем в очереди
Команда mailq в конце выдает общее количество сообщений в очереди, например:
* в данном примере в очереди находится 18 сообщений общим объемом 23 Кбайт.
Также, очередь можно посмотреть командами:
find /var/spool/postfix/deferred -type f | wc -l
find /var/spool/postfix/active -type f | wc -l
find /var/spool/postfix/incoming -type f | wc -l
find /var/spool/postfix/defer -type f | wc -l
* данные каталоги являются местом, где временно хранятся письма очереди.
Перезапустить очередь
Если не помогло, поочередно:
Настройка очереди
Задать периодичность повторной отправки сообщений:
postconf -e «queue_run_delay = 5m»
Задать время, на которое будет отложена отправка сообщений, которые не были отправлены по причине временных неисправностей (например, принимающий сервер не отвечает или просит повторить запрос позже):
postconf -e «minimal_backoff_time = 10m»
Задать максимальное время для отправки сообщений, которые не были отправлены по причине временных неисправностей:
postconf -e «maximal_backoff_time = 15m»
Выставить время жизни для сообщения в очереди:
postconf -e «maximal_queue_lifetime = 1d»
После внесения изменений необходимо перезапустить postfix:
service postfix restart || systemctl restart postfix
Информация о конкретном сообщении
* показывает параметры сообщения и причину, по которой письмо еще не отправлено.
Удалить/Очистить/Сбросить очередь в postfix
Иногда, приходиться удалять письма из очереди, и если не знаете как это сделать ( или может забыли), то данная тема поможет с этим разобраться.
Для начала, проверим что иметься в очереди:
У меня например, образовалось вот такая очередь:
-Queue ID- --Size-- ----Arrival Time---- -Sender/Recipient------- CA0664A220C9 438 Wed Apr 5 19:34:35 root@linux-notes.org (connect to example.org[2606:2800:220:1:248:1893:25c8:1946]:25: Connection timed out) user@example.org CC3B64A220C4 430 Wed Apr 5 19:30:46 root@linux-notes.org (connect to example.org[93.184.216.34]:25: Connection timed out) user@example.org 7BCF14A22CCE 3231 Fri Apr 7 14:21:23 MAILER-DAEMON (connect to captain-notes[/var/lib/imap/socket/lmtp]: No such file or directory) www@linux-notes.org -- 4 Kbytes in 3 Requests.
Или, имеется другая утилита:
Чтобы сохранить результат в текстовый файл, можно запустить:
$ postqueue -p > mailq_output.txt
Просмотр сообщения (Содержимое, заголовок и тело)
Предположим, что сообщение имеет идентификатор XXXXXXX (я выше показывал как )
$ postcat -vq XXXXXXXXXX > msg_output.txt
Удалить/Очистить/Сбросить очередь в postfix
Если есть необходимость удалить конкретное письмо ( нужно знать его ID), выполните команду:
# postsuper -d mail_queue_id
Чтобы очистить очередь в Postfix MTA просто введите следующую команду:
Чтобы удалить всю почту из очереди, введите:
Чтобы удалить все письма в отложенной очереди (deferred), введите:
Чтобы удалить все письма из почтовой очереди, которые пришли с test_user@linux-notes.org или отправлены на адрес test_user@linux-notes.org (команда одинакова независимо от того, является ли это адресом отправителя или получателя), вы можете использовать следующую команду:
# mailq | tail -n +2 | awk 'BEGIN < RS = "" >/test_user@linux-notes\.org$/ < print $1 >' | tr -d '*!' | postsuper -d -
# mailq | tail -n +2 | grep -v '^ *(' | \ gawk 'BEGIN /test_user@linux-notes.org/ ' | \ tr -d '*!' | sudo postsuper -d -
Ничего сложного в этом нет.
Нашел в интернете, готовый скрипт, который удаляет всю почту из mailq, которая соответствует регулярному выражению (указанному в качестве первого аргумента).
#!/usr/bin/perl $REGEXP = shift || die "no email-adress given (regexp-style, e.g. bl.*\@yahoo.com)!"; @data = qx; for (@data) < if (/^(\w+)(\*|\!)?\s/) < $queue_id = $1; >if($queue_id) < if (/$REGEXP/i) < $Q= 1; $queue_id = ""; > > > #open(POSTSUPER,"|cat") || die "couldn't open postsuper" ; open(POSTSUPER,"|postsuper -d -") || die "couldn't open postsuper" ; foreach (keys %Q) < print POSTSUPER "$_\n"; >; close(POSTSUPER);
Например, удалите все поставленные в очередь сообщения (исходящие и входящие) для http://linux-notes.org:
# ./drop_email_queue.pl linux-notes.org
Удалите все сообщения в очереди, содержащие слово «world»:
У меня, по данной статье «Удалить/Очистить/Сбросить очередь в postfix» все.
Управление очередью сообщений в Postfix
Доброго дня дорогие читатели. Использую в своей работе почтовые сервера на postfix. Приведу тут пожалуй самые часто используемые команды. Управление очередью сообщений Postfix нужны как говорится на каждый день. Итак приступим.
Просмотр и отправка сообщений
Вывести список писем в очереди
Список сообщений выводится в формате таблицы. Слева направо: уникальный код сообщения, размер сообщения, дата и время постановки сообщения в очередь. На следующей строке адрес сервера получателя и состояние отправки. Последней строчкой идет адрес получателя.
Команда mailq выводит все сообщения в очереди полным списком. По окончании вывода внизу указывается строка с объемом всех сообщений в очереди и их количеством. В примере ниже видно, что в очереди находится 52 сообщения общим объемом 26834 Кбайт.
-- 26834 Kbytes in 52 Requests.
Для быстрой проверки количества сообщений в очереди можно использовать grep
И на выходе получим одну строчку с количеством сообщений в очереди и их объемом.
Вывести всю информацию по сообщению в очереди
— уникальный код сообщения, который можно увидеть если ввести команду mailq. Данная команда позволяет более детально разобраться почему еще не отправлено указанное сообщение.
Принудительная отправка всех сообщений в очереди
После этой команды будет предпринята повторная попытка отправить все сообщения в очереди.
Принудительная отправка сообщения в очереди с указанным идентификатором
Перезапуск очереди для повторной обработки сообщений
Принудительная отправка сообщений в очереди относящихся к определенному домену
Установка периодичности повторной отправки сообщений
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. Подробнее можно прочитать выше.
Удалить все сообщения
Удалить все сообщения по определенному отправителю
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 где есть много информации на английском языке. Следите за нашим почтовым разделом, будет много интересного.
Хотите отблагодарить автора статьи? Это даст ему дополнительный стимул к написанию новых статей.
Вам также понравится
Конвертация CRT в PFX
Microsoft Exchange Server 2016 Cumulative Update 20
Копирование сообщений в 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=, 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)