BLACKBOXЦентр помощи

Отправка писем с сайта и из приложений (SMTP)

Как настроить отправку писем с сайта, из приложения или с сервера через SMTP-сервис с авторизацией, какие записи SPF, DKIM и DMARC добавить и что запросить у поддержки для собственного почтового сервера.

общееОбновлено 2026-10-09~10 мин чтения
На этой странице

На новом сервере сервис отправки почты, как правило, не настроен: письма контактных форм, сброса пароля и задач 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-серверу

  1. Установите утилиту nc. Ubuntu и Debian:

    apt update
    apt install -y netcat-openbsd

    AlmaLinux и CentOS Stream:

    dnf install -y nmap-ncat
  2. Проверьте порт:

    nc -vz -w 5 SMTP_HOST 587

    При успехе в выводе есть succeeded (Ubuntu, Debian) или Connected (AlmaLinux, CentOS Stream). timed out или TIMEOUT означает, что SMTP-сервер не ответил за 5 секунд.

  3. Проверьте шифрование:

    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:

  1. Проверьте файрвол системы. ufw и firewalld по умолчанию пропускают весь исходящий трафик; если вы его ограничили, разрешите нужный порт: Файрвол: сетевая фильтрация и ufw/firewalld на сервере.
  2. Попробуйте другой порт (465 вместо 587 или наоборот).
  3. Если не помогло, напишите в поддержку: 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

  1. Сначала проверьте, нет ли на сервере почтовой программы:

    ls -l /usr/sbin/sendmail

    Нормальный результат содержит «No such file or directory». Если файл существует, на сервере уже работает почтовая программа — её использует панель управления или собственный почтовый сервер: не устанавливайте msmtp, а обратитесь в поддержку.

  2. Установите msmtp из репозитория EPEL:

    dnf install -y epel-release
    dnf install -y msmtp nano
  3. Пакет msmtp создаёт и команду /usr/sbin/sendmail, которой пользуются cron и PHP. Проверьте:

    readlink -e /usr/sbin/sendmail

    Команда должна вывести /usr/bin/msmtp. Если она ничего не вывела, создайте ссылку:

    ln -s /usr/bin/msmtp /usr/sbin/sendmail

Файл настроек

  1. Создайте файл:

    nano /etc/msmtprc
  2. Вставьте содержимое ниже, замените значения, написанные заглавными буквами, сохраните (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.crt
    port 587 и tls_starttls on для порта 465 укажите port 465 и tls_starttls off
    from адрес отправителя; провайдер должен его разрешать
    set_from_header on подставляет адрес из строки from в заголовок «From» каждого письма; без этой строки письма cron уходят от имени root, и некоторые провайдеры их отклоняют
    syslog LOG_MAIL записывает в системный журнал по строке о каждом отправленном письме
  3. Разрешите читать файл только пользователю root:

    chmod 600 /etc/msmtprc

Проверка

printf 'Subject: Test\n\nTest' | msmtp АДРЕС_ПОЛУЧАТЕЛЯ

Если команда ничего не вывела, письмо передано провайдеру. Проверьте ящик получателя, включая папку «Спам». Результат отправки виден в журнале:

journalctl -t msmtp -n 20

Строка об успешной отправке заканчивается на exitcode=EX_OK. При ошибке msmtp выводит ответ SMTP-сервера — см. таблицу «Частые проблемы» ниже.

PHP

  1. Настройте 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-fpm

    AlmaLinux и CentOS Stream:

    printf 'sendmail_path = "/usr/bin/msmtp -t"\n' > /etc/php.d/99-msmtp.ini
    systemctl reload php-fpm
  2. PHP работает от пользователя www-data (Ubuntu, Debian) или apache (AlmaLinux, CentOS Stream) и не может прочитать файл пользователя root с правами 600. Дайте право чтения группе этого пользователя. Ubuntu и Debian:

    chown root:www-data /etc/msmtprc
    chmod 640 /etc/msmtprc

    AlmaLinux и 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-сервер доставить не может.

  1. Откройте crontab:

    crontab -e
  2. Добавьте в начало строку ниже и сохраните:

    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 dnsutils

AlmaLinux и 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.

Не нашли ответ?Напишите нам — служба поддержки ответит. support@blackbox.md
Открыть тикет