Отправка писем с сайта и из приложений (SMTP)
Как настроить отправку писем с сайта, из приложения или с сервера через SMTP-сервис с авторизацией, какие записи SPF, DKIM и DMARC добавить и что запросить у поддержки для собственного почтового сервера.
На этой странице
На новом сервере сервис отправки почты, как правило, не настроен: письма контактных форм, сброса пароля и задач cron никуда не уходят. В этом руководстве описано, как отправлять их с авторизацией через SMTP-сервер почтового провайдера вашего домена или сервиса транзакционной почты и какие DNS-записи добавить. Команды выполняются на сервере под root в SSH-сессии (Подключение к серверу по SSH (Windows, macOS, Linux)); IP-адрес сервера указан в панели app.blackbox.md: «Инфраструктура» → «Мои серверы», поле «IP».
Доступно: всем, у кого есть root-доступ по SSH к серверу BLACKBOX. На тарифе «VPS hosting» с панелью управления сначала уточните в поддержке, какая панель установлена: Тарифы «VPS hosting» с панелью управления.
Что нужно получить у почтового провайдера
Используйте SMTP-сервер провайдера, у которого размещена почта вашего домена, или сервис транзакционной почты. В документации провайдера найдите:
| Что | Обычные значения | В этом руководстве |
|---|---|---|
| SMTP-сервер | имя, которое указал провайдер | SMTP_HOST |
| Порт и шифрование | 587 со STARTTLS или 465 с TLS | 587 |
| Логин и пароль | адрес почты и его пароль, пароль приложения или API-ключ — как указывает провайдер | ПОЛЬЗОВАТЕЛЬ_SMTP, ПАРОЛЬ_SMTP |
| Адрес отправителя | адрес на вашем домене, разрешённый провайдером | АДРЕС@ДОМЕН |
Во многих приложениях STARTTLS (порт 587) называется «TLS», а TLS с момента подключения (порт 465) — «SSL».
Почему не отправлять напрямую с IP-адреса сервера: серверы получателей проверяют репутацию отправляющего IP-адреса и его обратную запись (PTR), а у нового адреса репутации ещё нет. Обратный DNS (PTR) в панели не настраивается: напишите нам IP сервера и нужное имя. Через SMTP-сервис письма уходят с серверов провайдера, которые эти проверки уже проходят.
Безопасность С паролем SMTP или API-ключом любой может отправлять письма от имени вашего домена. Не храните их в публичных git-репозиториях, на скриншотах и в тикетах. Файлам, в которых они записаны, задайте права
600, чтобы их мог читать только владелец. Если провайдер позволяет, создайте отдельного пользователя или ключ только для отправки, а не используйте пароль своего почтового ящика.
Шаг 1. Проверьте подключение к SMTP-серверу
Установите утилиту
nc. Ubuntu и Debian:apt update apt install -y netcat-openbsdAlmaLinux и CentOS Stream:
dnf install -y nmap-ncatПроверьте порт:
nc -vz -w 5 SMTP_HOST 587При успехе в выводе есть
succeeded(Ubuntu, Debian) илиConnected(AlmaLinux, CentOS Stream).timed outилиTIMEOUTозначает, что SMTP-сервер не ответил за 5 секунд.Проверьте шифрование:
openssl s_client -starttls smtp -connect SMTP_HOST:587 -crlfПосле сертификата должна появиться строка
Verify return code: 0 (ok). Затем введите строки ниже, нажимая Enter после каждой. В ответе наEHLOдолжна быть строка сAUTH, аQUITзакрывает соединение.EHLO test QUIT
Для порта 465 проверка такая:
nc -vz -w 5 SMTP_HOST 465
openssl s_client -connect SMTP_HOST:465 -crlfЕсли проверка завершается timed out или TIMEOUT:
- Проверьте файрвол системы. ufw и firewalld по умолчанию пропускают весь исходящий трафик; если вы его ограничили, разрешите нужный порт: Файрвол: сетевая фильтрация и ufw/firewalld на сервере.
- Попробуйте другой порт (465 вместо 587 или наоборот).
- Если не помогло, напишите в поддержку: IP-адрес сервера (
IP_СЕРВЕРА), порт и имя SMTP-сервера. Каналы связи: Как связаться с поддержкой BLACKBOX.
Шаг 2. Настройте приложение
WordPress
По умолчанию WordPress отправляет письма функцией PHP mail(), но на новом сервере ей не через что их отправить. Установите SMTP-плагин из каталога плагинов WordPress и укажите в его настройках:
- сервер:
SMTP_HOST; - порт 587 и шифрование TLS (STARTTLS) или порт 465 и шифрование SSL;
- включённую авторизацию с логином и паролем или API-ключом;
- адрес отправителя:
АДРЕС@ДОМЕН.
Затем отправьте тестовое письмо из плагина. Установка WordPress: WordPress на LEMP (nginx, MariaDB, PHP).
Другие приложения и фреймворки
Укажите параметры SMTP в конфигурации приложения или в файле .env. Названия переменных у каждого приложения свои — берите их из его документации. Пример:
MAIL_HOST=SMTP_HOST
MAIL_PORT=587
MAIL_ENCRYPTION=tls
MAIL_USERNAME=ПОЛЬЗОВАТЕЛЬ_SMTP
MAIL_PASSWORD=ПАРОЛЬ_SMTP
MAIL_FROM_ADDRESS=АДРЕС@ДОМЕННе добавляйте файл с паролем в git-репозиторий (внесите его в .gitignore) и разрешите читать его только пользователю, от имени которого работает приложение, например www-data:
chown www-data:www-data /var/www/ПРИЛОЖЕНИЕ/.env
chmod 600 /var/www/ПРИЛОЖЕНИЕ/.envПерезапустите приложение, чтобы оно прочитало новые настройки.
В AlmaLinux и CentOS Stream SELinux по умолчанию блокирует подключения из PHP (в том числе из WordPress) к SMTP-серверу. Разрешите их:
setsebool -P httpd_can_sendmail 1Шаг 3. Отправка с сервера через msmtp (необязательно)
Задачам cron, функции PHP mail() и программам, которые вызывают sendmail, нужна программа, которая передаст письма дальше. msmtp отправляет их через SMTP-сервер провайдера с теми же учётными данными. Он не принимает почту и не держит очередь писем.
Ubuntu и Debian
apt update
apt install msmtp msmtp-mta- Пакет
msmtp-mtaсоздаёт команду/usr/sbin/sendmail, которой пользуются cron и PHP. - На вопрос «Enable AppArmor support?» оставьте ответ по умолчанию — «No».
Внимание Если apt сообщает, что удалит пакеты (
The following packages will be REMOVED), напримерpostfixилиexim4, ответьтеn. На сервере уже работает почтовая программа — её использует панель управления или собственный почтовый сервер: не заменяйте её на msmtp, а обратитесь в поддержку.
AlmaLinux и CentOS Stream
Сначала проверьте, нет ли на сервере почтовой программы:
ls -l /usr/sbin/sendmailНормальный результат содержит «No such file or directory». Если файл существует, на сервере уже работает почтовая программа — её использует панель управления или собственный почтовый сервер: не устанавливайте msmtp, а обратитесь в поддержку.
Установите msmtp из репозитория EPEL:
dnf install -y epel-release dnf install -y msmtp nanoПакет
msmtpсоздаёт и команду/usr/sbin/sendmail, которой пользуются cron и PHP. Проверьте:readlink -e /usr/sbin/sendmailКоманда должна вывести
/usr/bin/msmtp. Если она ничего не вывела, создайте ссылку:ln -s /usr/bin/msmtp /usr/sbin/sendmail
Файл настроек
Создайте файл:
nano /etc/msmtprcВставьте содержимое ниже, замените значения, написанные заглавными буквами, сохраните (Ctrl+O и Enter) и выйдите (Ctrl+X):
defaults auth on tls on tls_starttls on tls_trust_file /etc/ssl/certs/ca-certificates.crt syslog LOG_MAIL account default host SMTP_HOST port 587 from АДРЕС@ДОМЕН set_from_header on user ПОЛЬЗОВАТЕЛЬ_SMTP password ПАРОЛЬ_SMTPСтрока Что делает tls_trust_fileфайл с доверенными центрами сертификации; в AlmaLinux и CentOS Stream укажите /etc/pki/tls/certs/ca-bundle.crtport 587иtls_starttls onдля порта 465 укажите port 465иtls_starttls offfromадрес отправителя; провайдер должен его разрешать set_from_header onподставляет адрес из строки fromв заголовок «From» каждого письма; без этой строки письма cron уходят от имениroot, и некоторые провайдеры их отклоняютsyslog LOG_MAILзаписывает в системный журнал по строке о каждом отправленном письме Разрешите читать файл только пользователю
root:chmod 600 /etc/msmtprc
Проверка
printf 'Subject: Test\n\nTest' | msmtp АДРЕС_ПОЛУЧАТЕЛЯЕсли команда ничего не вывела, письмо передано провайдеру. Проверьте ящик получателя, включая папку «Спам». Результат отправки виден в журнале:
journalctl -t msmtp -n 20Строка об успешной отправке заканчивается на exitcode=EX_OK. При ошибке msmtp выводит ответ SMTP-сервера — см. таблицу «Частые проблемы» ниже.
PHP
Настройте PHP-FPM на отправку писем через msmtp и перезагрузите его. Ubuntu 24.04 (в другой системе замените
8.3на установленную версию PHP, например8.2в Debian 12):printf 'sendmail_path = "/usr/bin/msmtp -t"\n' > /etc/php/8.3/fpm/conf.d/99-msmtp.ini systemctl reload php8.3-fpmAlmaLinux и CentOS Stream:
printf 'sendmail_path = "/usr/bin/msmtp -t"\n' > /etc/php.d/99-msmtp.ini systemctl reload php-fpmPHP работает от пользователя
www-data(Ubuntu, Debian) илиapache(AlmaLinux, CentOS Stream) и не может прочитать файл пользователяrootс правами600. Дайте право чтения группе этого пользователя. Ubuntu и Debian:chown root:www-data /etc/msmtprc chmod 640 /etc/msmtprcAlmaLinux и CentOS Stream, где отправку из PHP должен разрешить ещё и SELinux:
chown root:apache /etc/msmtprc chmod 640 /etc/msmtprc setsebool -P httpd_can_sendmail 1
После этого учётные данные SMTP может прочитать любой PHP-код на сервере — ещё одна причина завести отдельного пользователя SMTP только для отправки.
Cron
Cron отправляет вывод задач на адрес из переменной MAILTO. Без неё письмо уходит локальному пользователю (например, root), а такой адрес SMTP-сервер доставить не может.
Откройте crontab:
crontab -eДобавьте в начало строку ниже и сохраните:
MAILTO=АДРЕС_ПОЛУЧАТЕЛЯ
Шаг 4. Добавьте SPF, DKIM и DMARC
Без этих TXT-записей письма часто попадают в спам или отклоняются. Точные значения даёт почтовый провайдер. Зачем нужна каждая запись, объяснено в разделе «Рекомендации по отправке почты» статьи Политика допустимого использования: что запрещено.
| Запись | «Имя» | «Значение» |
|---|---|---|
| SPF | @ |
v=spf1 include:SPF_ПРОВАЙДЕРА ~all |
| DKIM | СЕЛЕКТОР._domainkey |
значение v=DKIM1; … от провайдера |
| DMARC | _dmarc |
v=DMARC1; p=none; rua=mailto:АДРЕС@ДОМЕН |
- У домена должна быть только одна SPF-запись. Если она уже есть, добавьте в неё
include:провайдера, а не создавайте вторую.ip4:IP_СЕРВЕРАдобавляйте, только если сервер сам отправляет письма без SMTP-сервиса (например, собственный почтовый сервер). СЕЛЕКТОР— имя, которое указал провайдер. Некоторые провайдеры выдают ключ DKIM в виде CNAME-записи: если её значение содержит символ_, добавьте её прямо в аккаунте DNS-провайдера, а не через панель.- Начните DMARC с
p=none. Наquarantineилиrejectпереходите, когда отчёты покажут, что ваши письма проходят проверку.
Записи добавляются у DNS-провайдера домена. Если вы подключили Cloudflare или GoDaddy, их можно добавить на странице «DNS» панели (app.blackbox.md/dns): «Добавить запись», тип TXT, поля «Имя» и «Значение», затем «Сохранить». Подробно: Управление DNS-записями из панели.
Через несколько минут проверьте на сервере или на своём компьютере (Linux, macOS):
dig +short TXT ДОМЕН
dig +short TXT _dmarc.ДОМЕН
dig +short TXT СЕЛЕКТОР._domainkey.ДОМЕНКаждая команда должна вывести добавленное значение в кавычках. В Windows используйте:
nslookup -type=TXT ДОМЕНЕсли на сервере нет dig, установите его. Ubuntu и Debian:
apt install -y dnsutilsAlmaLinux и CentOS Stream:
dnf install -y bind-utilsПроверьте доставку
| Где | Что искать |
|---|---|
Журнал msmtp: journalctl -t msmtp |
exitcode=EX_OK у каждого письма |
Postfix, если вы его используете: journalctl -u 'postfix*'; если в системе есть rsyslog — также /var/log/mail.log (Ubuntu, Debian) или /var/log/maillog (AlmaLinux, CentOS Stream) |
status=sent |
| Ящик получателя: исходный текст письма (со всеми заголовками) | строка Authentication-Results с spf=pass, dkim=pass и dmarc=pass |
Собственный почтовый сервер
Если вы хотите держать почтовые ящики на сервере или принимать почту (Postfix и Dovecot или почта панели управления):
- Почтовому серверу на VPS нужны порты (25, 465, 587, 993), которые по умолчанию закрыты в сетевой фильтрации. Фильтрация, которой управляет BLACKBOX, по умолчанию пропускает порты 22, 80 и 443 и ping; другие порты — по запросу через поддержку (Файрвол: сетевая фильтрация и ufw/firewalld на сервере).
- Сервер отправляет письма напрямую другим почтовым серверам, поэтому важны репутация IP-адреса и запись PTR. Обратный DNS (PTR) в панели не настраивается: напишите нам IP сервера и нужное имя.
- Для почтовых ящиков обычно проще отдельный почтовый провайдер: вам не придётся самим заниматься фильтрацией спама, репутацией адреса и резервными копиями писем.
- На тарифе «VPS hosting» уточните в поддержке, какая панель управления установлена: Тарифы «VPS hosting» с панелью управления.
Важно Обратитесь в поддержку до установки почтового сервера. Укажите IP-адрес сервера, номер заказа (
BBX-…) и нужные порты.
Правила отправки писем
Глава 2 «Условий использования» (blackbox.md/ru/info/terms) запрещает:
- спам «в любой форме» через Услуги BLACKBOX, а также спам через стороннего провайдера, рекламирующий ресурсы, размещённые в BLACKBOX (пункт 2.2);
- добавление адресов в списки рассылки без double opt-in. Подтверждения согласия хранятся всё время существования списка, а купленные или арендованные списки запрещены (пункт 2.3).
Рассылки и массовые кампании отправляйте через специализированный почтовый сервис, а не через обычный SMTP почтового ящика. Подробнее: Политика допустимого использования: что запрещено.
Если почтовая очередь растёт или уходят письма, которых вы не отправляли, сервер или сайт может быть взломан: Сервер взломан или атакован: что делать.
Частые проблемы
| Сообщение или симптом | Причина | Что делать |
|---|---|---|
Connection timed out, timed out или TIMEOUT на порту 587 или 465 |
исходящий трафик к SMTP-серверу не проходит | проверьте правила ufw/firewalld, попробуйте другой порт, затем напишите в поддержку IP сервера, порт и SMTP-сервер |
535 или «authentication failed» |
неверный логин или пароль, либо провайдер требует пароль приложения или API-ключ | проверьте данные; создайте у провайдера пароль приложения или API-ключ |
| «Relay access denied» или «Sender address rejected» | провайдер не разрешает этот адрес отправителя | отправляйте с адреса, разрешённого провайдером; у некоторых провайдеров домен нужно сначала добавить и подтвердить |
| Письма попадают в спам | нет SPF, DKIM или DMARC, либо домен отправителя не совпадает с подтверждённым | добавьте записи из шага 4 и отправляйте с адреса домена, подтверждённого у провайдера |
sendmail: not found |
нет команды sendmail |
Ubuntu и Debian: установите msmtp-mta; AlmaLinux и CentOS Stream: создайте ссылку из шага 3 |
cannot set X509 trust file |
в tls_trust_file указан файл другого дистрибутива |
укажите путь для вашей системы из таблицы в шаге 3 |
account default not found: no configuration file available при отправке из PHP |
пользователь PHP не может прочитать /etc/msmtprc |
выполните chown и chmod 640 из раздела про PHP |
| В AlmaLinux или CentOS Stream PHP не отправляет письма, хотя проверка из консоли проходит | отправку из PHP блокирует SELinux | выполните команду setsebool из раздела про PHP |
Частые вопросы
Можно ли заказать почтовые ящики у BLACKBOX? Через аккаунт — нет: почтовые ящики онлайн не заказываются. Спросите в поддержке, что вам могут предложить: Продукты и конфигурации по запросу.
Может ли AI-ассистент настроить отправку почты?
Да, с помощью инструмента run_server_command и токена с разрешением «Выполнять любые команды от root на моих серверах» (servers:exec): Выполнение команд на сервере через AI. Учётные данные SMTP, которые вы ему передаёте, попадают к провайдеру AI-модели: используйте отдельного пользователя SMTP и смените пароль, если вставили его в переписку (Безопасность токенов и AI-агентов).
Нужно ли настраивать и приложение, и msmtp?
Не обязательно. Если у приложения есть собственные настройки SMTP (шаг 2), их достаточно. msmtp нужен для cron, функции PHP mail() и программ, которые вызывают sendmail. Когда msmtp настроен для PHP, WordPress отправляет письма и без SMTP-плагина.
Я перенёс сайт от другого провайдера, и формы перестали отправлять письма. Почему? На старом хостинге отправку обычно настраивал провайдер. На сервере BLACKBOX её настраиваете вы — по шагам выше. О переносе почты: Перенос сайта на сервер BLACKBOX.