Ни для кого не секрет, что такой чудесный продукт как Zabbix умеет отправлять письма при определенных обстоятельствах.
Проблема заключается в том, что он пытается отправить письмо только единожды и, если внезапно целевой почтовый сервер будет недоступен, полезная информация так никогда и не дойдёт до получателя.
Решением проблемы является поднятие своего mail-сервера в локальной сети (или даже на той же машине), работающего в режиме релеинга и который гарантированно будет доступен.
Собственно, он займётся приёмом писем, их складированием в определенное место и настойчивой отправкой по назначению. Попытки отправки будут повторяться до победного.
Поднимать какой-нибудь толстый postfix ради такой небольшой задачи просто нецелесообразно, и я занялся поиском более "лёгкого" решения.
Критериями поиска являлись наличие в портах FreeBSD, лёгкость настройки и низкое потребление ресурсов.
И тут мой взор пал на /usr/ports/mail/emailrelay. Бинарник весит 800k и, по заверениям на официальном сайте, настраивается за 5 минут.
Работает он следующим образом: SMTP сервер принимает письма и складирует их в назначенную директорию. Далее, в зависимости от настройки, собранные письма разом отправляются получателям по таймеру или по желанию администратора.
Схема работы с официального сайта:
Сборка и настройка.
Начинается всё тривиально
$ cd /usr/ports/mail/emailrelay && make install clean
ВАЖНО! Если вы пользуетесь ipv4 (а я почему-то уверен, что вы пользуетесь именно этой версией), то перед сборкой следует поменять следующую строчку в Makefile:
$ diff -ru Makefile.old Makefile
-CONFIGURE_ARGS= --without-pam --enable-ipv6
+CONFIGURE_ARGS= --without-pam --disable-ipv6
В противном случае, emailrelay соберется с поддержкой ipv6 и БЕЗ поддержки ipv4. Аплодисменты разработчикам.
Конфиг находится тут: /usr/local/etc/emailrelay.conf и был мной написан следующим образом:
spool-dir /var/spool/emailrelay #тут указывается директория для складирования
#писем(не забываем настроить права!)
forward-to mailserver.anydomain #почтовый сервер, куда письма будут
#перенаправлены
poll 1 #время в секундах между попытками отправить письмо на сервер,
#указанный в forward-to. Также может быть выствлен в 0. Тогда собранные письма
#нужно будет отправлять вручную командой emailrelay --as-client
port 2525 #порт, на котором будет сидеть emailrelay
Запускаем
Остаётся только сказать Zabbix'у, что почтовый сервер теперь на localhost:port (в случае установки релея на ту же машину).
Наслаждаемся письмами, которые теперь точно будут отправлены на вашу (или не вашу) почту.