Меня интересует оповещение группы поддержки по электронной почте о том, что почта копируется и не пересылается должным образом, т. Е. Отправка задерживается. Пробовал в nagios, решения нет. Я пробовал с logwatch, это не тот, который нужен.
Желаемое решение: Если письмо не отправлено «status = sent (250 Ok)», то оповещение по почте. Это просто, проблемная часть - избежать повторения. Таким образом, если обнаружено предупреждение в случае, если вторая проверка не отправлена, к этому относится какое-либо предупреждение.
Как это можно сделать?
Может у postfix есть свое решение?
SMTP не предназначен для связи в реальном времени и с малой задержкой!
Даже если сообщение покинуло ваш сервер, обычно оно еще не доставлено получателям INBOX, оно все еще может подвергаться обработке удаленным спам-фильтром и / или AV-фильтром.
поскольку серый список одновременно довольно эффективен и распространен, даже временные ошибки не являются проблемой.
Просто следите за размером почтовой очереди, в зависимости от вашего шаблона использования только события с очередью, превышающей 100 или 1000, могут вызывать беспокойство и указывать на реальные проблемы ...
Работа с повторением должна быть управляемой, если вы хотите создать где-нибудь дополнительный файл / журнал. Например, выполните обычные шаги для отправки электронного письма с предупреждением, а затем после того, как сообщение будет успешно отправлено, добавьте дополнительную строку в сценарий, который записывает метку времени и, возможно, некоторую другую информацию в новый файл журнала, что-то вроде этого будет работать:
echo $(date +%s),sent_queuealert >> /path/to/postfix/logs/sentalerts.log
Который будет хранить штамп даты unix и предпринятые действия. Теперь, когда файл журнала записан, некоторая дополнительная логика в операторах if-else - это все, что требуется для управления отправкой сообщения, вот простой пример.
#!/bin/bash
lastalert=$(grep "sent_queuealert" ./sentalerts.log |tail -n1 |cut -d"," -f1)
ctime=$(date +%s)
dtime=$(expr $ctime - $lastalert)
if [ "$dtime" -lt 250 ]
then
echo "Too soon to send"
echo $(date +%s),skip_send >> sentalerts.log
else
echo "place holder for alert sender"
echo $(date +%s),sent_queuealert >> sentalerts.log
fi
Это довольно грубая версия, но ее достаточно легко изменить для ваших целей. Использование cron для запуска соответствующего сценария каждые несколько минут позволит вам проверять файл журнала и не обязательно полагаться на внутренние механизмы в postfix. Есть интересная информация о мониторинг постфикса в этом ответе. Объединение этих знаний с какой-либо проверкой журнала с отметками времени может дать более элегантное решение.
Мониторинг электронной почты должен начинаться с нескольких простых вещей:
Когда вы освоите основы, подумайте о расширении до
postfix
и его помощники