До основного вмісту

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.

Чи була стаття корисною?
← Назад до бази знань Поставити питання підтримці