К основному содержимому

Postfix на VPS: отправка email со своего сервера

VDS / VPS · 10.02.2026 · 4 мин чтения
Иллюстрация к статье «Postfix на VPS: отправка email со своего сервера»
Важно для серверов ZevsHost: исходящие SMTP-порты 25, 465 и 587 на VDS закрыты по умолчанию — это защита сети от спам-рассылок. Описанная ниже прямая доставка на новом сервере работать не будет, как и внешние релеи по SMTP. Проверенным клиентам порты открываем по заявке в поддержку, каждый случай рассматриваем отдельно. Если письма нужны сразу — отправляйте через HTTP API почтового сервиса: он работает по 443 и под ограничение не попадает. На виртуальном хостинге и выделенных серверах ограничения нет.

Если вашему приложению на VPS нужно отправлять письма (регистрация, пароли, уведомления), Postfix — стандартный выбор. Настройте его правильно, иначе письма попадут в спам.

Установка Postfix

sudo apt update
sudo apt install -y postfix
# Тип: "Internet Site"
# Mail name: mail.example.com

Базовый /etc/postfix/main.cf

myhostname = mail.example.com
mydomain = example.com
myorigin = $mydomain
inet_interfaces = loopback-only  # Только локальная отправка
inet_protocols = ipv4
mydestination = $myhostname, localhost.$mydomain, localhost
relayhost =
smtpd_banner = $myhostname ESMTP

# Ограничения
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination

Настройка DKIM через OpenDKIM

sudo apt install -y opendkim opendkim-tools

# Генерация ключей
sudo opendkim-genkey -s mail -d example.com -D /etc/opendkim/keys/example.com/

# Добавить в DNS TXT:
# mail._domainkey.example.com → содержимое mail.txt

# /etc/opendkim.conf:
Domain example.com
KeyFile /etc/opendkim/keys/example.com/mail.private
Selector mail
✅ Без DKIM большинство почтовых провайдеров будут помечать ваши письма как спам.

Тест отправки

sudo apt install -y mailutils

# Тест
echo "Test email from VPS" | mail -s "Test" your@gmail.com

# Логи
sudo tail -f /var/log/mail.log

Альтернатива: SMTP Relay через внешний сервис

СервисБесплатный лимитПлюсы
SendGrid100 писем/деньВысокая доставляемость
Mailgun5000 писем/месХорошее API
Amazon SES62000 писем/месДешевле всех
⚠️ Многие хостинг-провайдеры блокируют порт 25 для новых VPS. Используйте порт 587 (submission) или внешний SMTP relay.

Частые ошибки при настройке relay

Большинство сообщений в очереди Postfix на VPS ZevsHost объясняются одной из трёх причин.

status=deferred (delivery temporarily suspended: connect to gmail-smtp-in.l.google.com[...]:25: Connection timed out)

Именно так проявляется блокировка портов 25/465/587 на исходящих соединениях, о которой предупреждает панель выше: Postfix пытается доставить письмо напрямую, соединение зависает и в итоге письмо остаётся в очереди. Если порт для внешнего relay ещё не открыт по заявке, письма будут копиться в очереди, а не приходить с ошибкой сразу — это сбивает с толку при диагностике.

SASL authentication failed; server smtp.sendgrid.net[...] said: 535 Authentication failed

Неверный логин или пароль в /etc/postfix/sasl_passwd для внешнего relay, либо файл не пересобран после правки: после любого изменения обязательно выполните postmap /etc/postfix/sasl_passwd — Postfix читает не сам файл, а скомпилированную базу .db рядом с ним.

Client host rejected: cannot find your reverse hostname, [203.0.113.10]

Принимающий сервер не нашёл PTR-запись для IP-адреса вашего VPS и отклонил соединение — это отдельная от firewall-блокировки проблема, актуальная даже при открытых портах. PTR настраивается через поддержку хостинга, а не через DNS-панель домена.

Порты для отправки почты

ПортПротоколКогда используетсяШифрование
25SMTPСервер-сервер, прямая доставкаSTARTTLS опционально
465SMTPSОтправка из приложения (implicit TLS)TLS с начала соединения
587SubmissionРекомендованный порт для приложенийSTARTTLS обязателен

Для relay через внешний сервис используйте 587 или 465 — 25-й порт нужен только для прямой доставки между почтовыми серверами и на VDS ZevsHost закрыт по умолчанию для всех трёх, см. предупреждение в начале статьи.

Когда собственный Postfix не подходит

Если приложение отправляет маркетинговые или массовые рассылки, а не транзакционные письма — Postfix и relay через SMTP решают только часть задачи: без управления отписками, обработкой отказов (bounce) и репутацией отправителя рассылка быстро попадёт в спам-фильтры получателей. Для таких задач используйте HTTP API специализированного сервиса рассылок, а не SMTP вообще. Если приложение уже умеет отправлять письма через HTTP API почтового провайдера — не разворачивайте Postfix совсем, это лишний компонент для мониторинга и обновлений без выгоды.

Как проверить результат

Проверяйте не факт отправки одного письма, а то, что очередь не растёт и письма реально уходят через relay:

# Очередь: не должно расти количество deferred
mailq | tail -20

# Тест SASL-авторизации к relay
swaks --to test@example.com --from you@example.com   --server smtp.sendgrid.net:587 --auth LOGIN   --auth-user apikey --auth-password YOUR_API_KEY --tls

# Проверить, что письмо реально ушло через relay, а не напрямую
grep "relay=" /var/log/mail.log | tail -5

В логе после успешной отправки через relay строка должна содержать relay=smtp.sendgrid.net[...]:587, а не IP получателя напрямую. Если видите прямой IP получателя вместо relay-хоста, значит relayhost в main.cf не применился — проверьте синтаксис и перезапустите Postfix.

Статья помогла?
← Назад в базу знаний Задать вопрос поддержке