Phoenix Mailдокументация

Справочник команд

Полный список того, что умеет mailnode. Каждая команда печатает результат и пишет действие в журнал. Запускать от root.

Общие

КомандаЧто делает
mailnode initинициализация узла: база, ключи, каталоги, первые конфиги
mailnode versionпоказать версию
mailnode doctorпроверка служб, портов, MX и очереди
mailnode renderпересобрать конфиги Postfix, Dovecot, OpenDKIM и rspamd из базы, перезапустить службы
mailnode render --no-reloadтолько собрать файлы, службы не трогать

Домены

mailnode domain add example.ru      # домен, ключ DKIM создаётся сразу
mailnode domain ls
mailnode domain rm example.ru       # удаляет домен и его ключи

Ящики

mailnode mailbox add ivan@example.ru --password 'секрет' --quota 2G
mailnode mailbox ls
mailnode mailbox passwd ivan@example.ru 'новый-пароль'
mailnode mailbox rm ivan@example.ru

Квота: 500M, 2G, 0 — без ограничения. Пароль можно не указывать — узел сгенерирует.

Алиасы

mailnode alias add info@example.ru ivan@example.ru
mailnode alias add sales@example.ru ivan@example.ru,petr@example.ru
mailnode alias ls
mailnode alias rm info@example.ru

DKIM

mailnode dkim show example.ru

Печатает селектор и полную TXT-запись. Руками ключ не меняется: он создан при добавлении домена и переезжает вместе с бандлом.

TLS

mailnode tls show              # какой сертификат используется и до какой даты
mailnode tls caddy             # забрать сертификат, выпущенный Caddy
mailnode tls auto              # выпустить через Let's Encrypt напрямую
mailnode tls set /путь/fullchain.pem /путь/privkey.pem

Состояние: бандл

mailnode export /root/node.tar.gz     # домены, ящики, ключи, настройки
mailnode bundle-info /root/node.tar.gz # что внутри, без разворачивания
mailnode import /root/node.tar.gz     # развернуть на другом узле
mailnode import --force ...           # перезаписать существующее
mailnode import --no-render ...       # не пересобирать конфиги

Импорт сверяет SHA256 каждого файла с манифестом и отказывается от повреждённого бандла.

Узлы

mailnode nodes add mx2 root@10.0.0.2
mailnode nodes ls
mailnode nodes rm mx2
mailnode sync                 # развернуть бандл на все узлы
mailnode sync mx2             # только на один
mailnode replicate            # скопировать почту
mailnode replicate --dry-run
mailnode replicate --target mx2 --one-way

Бэкапы

mailnode backup                        # в /var/backups/mailnode
mailnode backup --dir /mnt/backup
mailnode backup --keep 14              # сколько архивов хранить
mailnode backup --remote root@10.0.0.5:/backup
mailnode target add --name s3 --kind s3 --endpoint ... --bucket ... --access-key ... --secret-key ...
mailnode target test s3               # отправить пробный файл в хранилище
mailnode backup --target s3           # только в это хранилище

Спам и карантин

mailnode spam ls ivan@example.ru
mailnode spam release ivan@example.ru 42    # вернуть письмо в «Входящие»
mailnode spam rm ivan@example.ru 42

Автоответы

mailnode autoresponder set ivan@example.ru --subject "Отпуск" --text "Вернусь 3 ноября"
mailnode autoresponder show ivan@example.ru
mailnode autoresponder off ivan@example.ru

Переезд

mailnode migrate --source imap.example.com --user ivan@example.com \
    --password 'пароль' --to ivan@example.ru --ssl

Дополнительно: --no-ssl для сервера без TLS, --folder-only — только письма, без учётных данных.

DMARC

mailnode dmarc ingest /var/spool/dmarc/*.xml
mailnode dmarc report example.ru

Настройки

mailnode config ls
mailnode config get message_size_limit
mailnode config set message_size_limit 104857600

Алерты

mailnode alert                 # проверить узел и, если есть проблемы, написать админу
mailnode alert --dry-run       # только показать
mailnode alert --to admin@example.ru

База и журнал

mailnode db info     # размер, таблицы, число записей
mailnode db dump     # последние действия из журнала

LDAP / Active Directory

mailnode ldap status
mailnode ldap set --server ldap://dc.example.ru --base "dc=example,dc=ru" \
    --bind "cn=svc,dc=example,dc=ru" --password 'пароль'
AD проверен не был Код есть, но живого домена при разработке не было. Включайте на тестовом узле и проверяйте вход: при ошибке конфиг откатывается.

Самопроверка и восстановление

mailnode selftest                       # полная проверка узла
mailnode restore /root/mailnode-20261026-0330.tar.gz
mailnode restore --yes архив.tar.gz     # без вопроса
mailnode queue ls
mailnode queue flush
mailnode queue rm --id 4F2C1A9B3D
mailnode queue rm --all

Ловушка домена и ключи

mailnode catchall example.ru set ivan@example.ru
mailnode catchall example.ru show
mailnode catchall example.ru off
mailnode dkim rotate example.ru --selector mail2

Импорт из mailcow

mailnode import-mailcow --docker --db-password 'DBROOT'
mailnode import-mailcow --host 10.0.0.5 --user root --password 'пароль'

Коды возврата

0 — успех, 1 — ошибка выполнения, 2 — неверные аргументы. В скриптах удобно проверять так:

mailnode domain add example.ru || echo "домен не добавлен"