---
title: Минималистичная почтовая система
tags: репост, mail, software
---

Задача: на некоторых хостах нужна отправка почты, но самый минимум.

Например, если там в раз сутки отправляется 2 письма (отчёты logwatch, tiger) и ещё сколько-то с cron'а - особого смысла держать там MTA - нет. Для таких случаев я использую связку esmtp+procmail.

---

Плюсы: в процессах не висит ничего лишнего. Безобразно просто в настройке. Не требует обслуживания. Минусы: нет retry ни в каком виде. Если в момент отправки недоступен smarthost - почта пропадёт.

Вот такой минимальный конфиг будет складывать локальную почту в системные mailbox'ы, а остальное - слать через smarthost. А на smarthost'е оно уже разруливается как надо.

``/etc/esmtprc``:

    hostname=mail.home.lan:25
    mda="/usr/bin/procmail -d %T"

И, чтоб два раза не вставать: если хост работает долго, в ящике могут накапливаться тонны писем.

Вот такой скриптик разгребает ящик раз в месяц и скидывает в архив всё, что не относится к текущему месяцу.

    #!/bin/sh
    set -e
    
    MBOX="/var/spool/mail/$USER"
    ARCH="$HOME/mail-archive"
    # чёрная магия. определение предыдущего месяца
    NAME=$(date --date="$(date +%Y-%m-15) -1 month" +%Y-%m)
    DATE=$(date +%Y-%m-01)
    
    mkdir -p "$ARCH"
    
    if [ -f "$ARCH/$NAME.archive.gz" ]; then
      echo "archive for prev month already exists, abort"
      exit 1
    fi
    
    # http://adc-archmbox.sourceforge.net
    archmbox --archive --date "$DATE" \
      --archive-path "$ARCH" --archive-name "$NAME" \
      --extension archive --compress --totals "$MBOX"
    
    exit 0

Положить куда-нибудь в ``/usr/local``, дать права и засунуть вызов в cron на первое число каждого месяца. В результате в почту будет прилетать вот такой отчётик:

    Mailbox '/var/spool/mail/alex': 238 messages (7.66 MB)
    Archived:                       238 messages (7.66 MB)
    
    Archive mailbox: /home/alex/mail-archive/2015-11.archive
    
    Overall summary
    ==================================================
    Parsed mailboxes:                                1
    Skipped mailboxes:                               0
    Mailboxes in use:                                0
    Invalid mailboxes:                               0
    Non existent mailboxes:                          0
    Empty mailboxes:                                 0
    Parsed messages:                               238
    Total used space (MB):                        7.66
    Archived messages:                             238
    Total saved space (MB):                       7.66
    ==================================================