Mail Server Docs
Stalwart · mx1.ferso.ru

Подключение домена и почтового клиента

Практическая инструкция по DNS, созданию аккаунтов, App Password, SMTP, IMAP и проверке доставки.

Введите ваш домен — примеры на странице обновятся автоматически.
SMTP SSL/TLSmx1.ferso.ru:465
SMTP STARTTLSmx1.ferso.ru:587
IMAP SSL/TLSmx1.ferso.ru:993
WebAdminmailadmin.ferso.ru

Архитектура

НазначениеАдресПримечание
WebAdminhttps://mailadmin.ferso.ru/admin/Администрирование Stalwart
SMTP/IMAP hostnamemx1.ferso.ruОбщий для всех почтовых доменов
Входящая почта25/tcpОбмен между почтовыми серверами
SMTP SSL/TLS465/tcpРекомендуется для приложений
SMTP STARTTLS587/tcpАльтернативный вариант
IMAP SSL/TLS993/tcpЧтение входящих писем
TLS готов: для mx1.ferso.ru используется доверенный сертификат Let’s Encrypt.

1. Добавление нового домена

  1. Откройте WebAdmin.
  2. Перейдите: Management → Directory → Domains → Create.
  3. Создайте домен example.com.
  4. Выберите: DNS management: Manual, DKIM management: Automatic, Certificate management: Manual.
  5. После сохранения откройте View DNS Zone File и скопируйте созданные Stalwart DKIM-записи.
Важно: отдельный TLS-сертификат для каждого почтового домена не нужен. Клиенты всегда подключаются к mx1.ferso.ru.

2. DNS-записи

Минимально нужны четыре группы записей: MXSPFDKIMDMARC

MX

ТипИмяПриоритетЗначение
MX@10mx1.ferso.ru
dig +short MX example.com @1.1.1.1

SPF

ТипИмяЗначение
TXT@v=spf1 mx -all
У домена должна быть только одна SPF-запись. Существующую политику нужно объединять, а не создавать вторую TXT-запись SPF.

DKIM

Точные selector и публичные ключи копируются из View DNS Zone File. Обычно Stalwart создаёт RSA и Ed25519.

dig +short TXT v1-ed25519-YYYYMMDD._domainkey.example.com @1.1.1.1
dig +short TXT v1-rsa-YYYYMMDD._domainkey.example.com @1.1.1.1

RSA-ключ может отображаться в панели DNS несколькими фрагментами, но это одна логическая TXT-запись.

DMARC

ТипИмяЗначение
TXT_dmarcv=DMARC1; p=none; rua=mailto:postmaster@example.com
Сначала используйте p=none. После успешных тестов переходите на quarantine, затем на reject.

3. Аккаунты, aliases и App Password

Создание аккаунта

Откройте Management → Directory → Accounts → Create и создайте, например:

admin@example.com

Обязательные aliases

postmaster@example.com → admin@example.com
abuse@example.com      → admin@example.com

App Password

  1. Откройте личный кабинет.
  2. Войдите под нужным почтовым аккаунтом.
  3. Перейдите: Credentials → App Passwords → Create.
  4. Создавайте отдельный App Password для каждого приложения.
Никогда не публикуйте: основной пароль, App Password, recovery-пароль, API key или содержимое .env.

4. Настройки SMTP

Рекомендуемый вариант

SMTP hostmx1.ferso.ru
SMTP port465
EncryptionSSL/TLS
AuthenticationLOGIN или PLAIN
Usernameadmin@example.com
PasswordApp Password аккаунта

Альтернатива с STARTTLS

Hostmx1.ferso.ru
Port587
EncryptionSTARTTLS

Переменные окружения

SMTP_HOST=mx1.ferso.ru
SMTP_PORT=465
SMTP_SECURE=true
SMTP_USER=admin@example.com
SMTP_PASSWORD=<APP_PASSWORD>

5. Настройки IMAP

IMAP hostmx1.ferso.ru
IMAP port993
EncryptionSSL/TLS
Usernameadmin@example.com
PasswordApp Password

Подходят Thunderbird, Outlook, Apple Mail и другие IMAP-клиенты. Отдельный веб-клиент на сервере не установлен.

6. Проверка настройки

DNS

dig +short MX example.com @1.1.1.1
dig +short TXT example.com @1.1.1.1
dig +short TXT _dmarc.example.com @1.1.1.1

SMTP AUTH через swaks

read -r -s -p "App Password: " SMTP_PASSWORD
echo

swaks \
  --server mx1.ferso.ru \
  --port 465 \
  --tls-on-connect \
  --auth LOGIN \
  --auth-user admin@example.com \
  --auth-password "$SMTP_PASSWORD" \
  --auth-hide-password \
  --quit-after AUTH

unset SMTP_PASSWORD

Ожидаемый ответ: 235 2.7.0 Authentication succeeded.

Проверка TLS

openssl s_client \
  -connect mx1.ferso.ru:465 \
  -servername mx1.ferso.ru \
  -verify_return_error \
  </dev/null 2>&1 \
  | grep -E 'subject=|issuer=|Verify return code'

Ожидается Verify return code: 0 (ok).

Проверка доставленного письма

В служебных заголовках должны быть:

spf=pass
dkim=pass
dmarc=pass

7. Примеры кода

Nodemailer / TypeScript

import nodemailer from "nodemailer";

const transporter = nodemailer.createTransport({
  host: "mx1.ferso.ru",
  port: 465,
  secure: true,
  auth: {
    user: "admin@example.com",
    pass: process.env.SMTP_PASSWORD!,
  },
});

await transporter.verify();

await transporter.sendMail({
  from: "Site <admin@example.com>",
  to: "recipient@example.net",
  subject: "Проверка SMTP",
  text: "Почтовый сервер работает.",
});

Python

import os
import smtplib
from email.message import EmailMessage

message = EmailMessage()
message["From"] = "Site <admin@example.com>"
message["To"] = "recipient@example.net"
message["Subject"] = "Проверка SMTP"
message.set_content("Почтовый сервер работает.")

with smtplib.SMTP_SSL("mx1.ferso.ru", 465, timeout=30) as smtp:
    smtp.login("admin@example.com", os.environ["SMTP_PASSWORD"])
    smtp.send_message(message)
Не используйте rejectUnauthorized: false: сертификат mx1.ferso.ru доверенный и должен проверяться клиентом.

8. Безопасность и ограничения

  • Пароли и App Password хранятся только в секретах приложения или в .env, который не публикуется.
  • API key не является SMTP-паролем.
  • STALWART_RECOVERY_ADMIN используется только для аварийного восстановления.
  • MX основного домена ferso.ru менять нельзя: его почта обслуживается сторонним провайдером.
  • Желательный PTR: 109.235.187.56 → mx1.ferso.ru. PTR настраивается у провайдера сервера.

9. Чек-лист нового домена

  1. Добавить домен example.com в Stalwart.
  2. Создать почтовый аккаунт.
  3. Создать aliases postmaster и abuse.
  4. Добавить MX, SPF, оба DKIM-ключа и DMARC.
  5. Дождаться распространения DNS.
  6. Создать отдельный App Password.
  7. Проверить SMTP AUTH и отправить тестовое письмо.
  8. Проверить spf=pass, dkim=pass, dmarc=pass.
  9. Подключить приложение к mx1.ferso.ru:465.
  10. После тестов повысить DMARC до quarantine, затем до reject.