Настройка Postfix для отправки почты в 1С-Битрикс и Битрикс24

Настройка Postfix Битрикс — схема отправки почты через SMTP

Настройка Postfix Битрикс — это первый шаг к решению проблемы со спамом и недоставкой писем. Письма из 1С-Битрикс и коробочной версии Битрикс24 попадают в спам или не доходят до получателей? Это одна из самых частых проблем при эксплуатации продуктов на платформе Битрикс. Причина — отправка через стандартную PHP-функцию mail() без аутентификации, SPF, DKIM и шифрования. Настройка Postfix для Битрикс решает эту проблему: письма отправляются через авторизованный SMTP-сервер с цифровой подписью, что повышает доставляемость и репутацию домена.

В этом руководстве мы пошагово выполним настройку Postfix как локального MTA (Mail Transfer Agent) на сервере с 1С-Битрикс, подключим SMTP-релей с SASL-аутентификацией, настроим DKIM-подпись, маршрутизацию по домену отправителя и интеграцию с Битриксом. Статья предназначена для системных администраторов и разработчиков, выполняющих настройку Postfix Битрикс-серверов на базе 1С-Битрикс и Битрикс24.

Как работает отправка почты в 1С-Битрикс

Функция bxmail и custom_mail

В продуктах 1С-Битрикс (включая «1С-Битрикс: Управление сайтом» и коробочные версии Битрикс24) за отправку почты отвечает глобальная функция bxmail(). Она работает по следующему алгоритму:

  1. Проверяет, определена ли пользовательская функция custom_mail()
  2. Если custom_mail() существует — вызывает её, передавая все параметры письма
  3. Если custom_mail() не определена — вызывает стандартную PHP-функцию mail()

Это важный механизм: через переопределение custom_mail() можно реализовать отправку через PHPMailer, SwiftMailer или другую библиотеку, минуя стандартный sendmail/Postfix. Подробнее об этом — в официальной документации bxmail.

Встроенная поддержка SMTP (с версии 21.900.0)

Начиная с версии 21.900.0 модуля main, в продуктах 1С-Битрикс появилась встроенная поддержка SMTP через административную панель. Это рекомендуемый способ настройки для большинства сценариев. Для активации добавьте в файл /bitrix/.settings.php:

'smtp' => array(
    'value' => array(
        'enabled' => true,
        'debug' => false,
    ),
),

После этого настройка станет доступна через: Настройки → Настройки продукта → Почтовые и СМС события → Настройки SMTP. Здесь можно задать SMTP-сервер, порт, логин и пароль, а также привязать разные SMTP-подключения к разным адресам отправителей — без единой строки кода.

Однако в сложных сценариях (кластерные конфигурации, множественные домены, интеграция с внешними сервисами) настройка Postfix на уровне сервера остаётся оптимальным решением. Именно поэтому настройка Postfix Битрикс — будь то Битрикс24 или «1С-Битрикс: Управление сайтом» — остаётся актуальной задачей для системных администраторов.

Преимущества Postfix перед стандартной функцией mail()

  • Разделение потоков — транзакционные и маркетинговые письма идут через разные SMTP
  • DKIM-подпись — автоматическое подписание всех исходящих писем
  • Аутентификация на внешнем SMTP — письма проходят проверку SPF и DMARC
  • Очередь и повторная доставка — Postfix управляет очередью при временных сбоях
  • Журналирование — детальные логи для диагностики проблем доставки
  • Маршрутизация по отправителю — разные домены могут использовать разные SMTP-серверы

Установка и настройка Postfix для Битрикс

Установка

Перед установкой убедитесь, что Sendmail не установлен — два MTA на одном сервере конфликтуют:

sudo apt-get update
sudo apt-get remove sendmail sendmail-base sendmail-cf 2>/dev/null
sudo apt-get install postfix libsasl2-modules

При установке Postfix выберите тип конфигурации «Internet with smarthost» (Интернет-сайт через релей), если планируете использовать внешний SMTP-сервер.

Базовая конфигурация main.cf

Откройте основной конфигурационный файл Postfix:

sudo nano /etc/postfix/main.cf

Добавьте или измените следующие параметры. Это базовая настройка Postfix Битрикс-сервера:

# Базовые параметры
myhostname = mail.yourdomain.com
mydomain = yourdomain.com
myorigin = $mydomain
inet_interfaces = loopback-only
mydestination = $myhostname, localhost.$mydomain, localhost

# Релей через внешний SMTP-сервер
relayhost = [smtp.yourserver.com]:587

# SASL-аутентификация
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous

# TLS-шифрование
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_wrappermode = no

# Ограничения
message_size_limit = 26214400

Настройка SASL-аутентификации

Создайте файл с учётными данными для аутентификации на SMTP-сервере:

sudo nano /etc/postfix/sasl_passwd

Добавьте строку с адресом SMTP-сервера и учётными данными:

[smtp.yourserver.com]:587 username:password

Затем создайте хэш-карту и ограничьте доступ к файлу с паролями:

sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo systemctl restart postfix

Маршрутизация писем по домену отправителя

Если сервер обслуживает несколько доменов (например, интернет-магазин и CRM на Битрикс24), каждый домен может отправлять письма через свой SMTP-сервер. Для этого в Postfix используется директива sender_dependent_relayhost_maps.

Важно: файл transport_maps работает по адресу получателя, а не отправителя. Для маршрутизации по домену отправителя необходимо использовать именно sender_dependent_relayhost_maps.

Настройка sender_dependent_relayhost_maps

Добавьте в /etc/postfix/main.cf:

# Маршрутизация по отправителю
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
smtp_sender_dependent_authentication = yes

Создайте файл /etc/postfix/sender_relay с правилами маршрутизации:

@example.com    [smtp.example.com]:587
@example2.com   [smtp.example2.com]:587

Аутентификация для нескольких SMTP-серверов

В файле /etc/postfix/sasl_passwd добавьте учётные данные для каждого сервера:

[smtp.example.com]:587    login@example.com:password1
[smtp.example2.com]:587   login@example2.com:password2

Примените настройки:

sudo postmap /etc/postfix/sender_relay
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo chmod 600 /etc/postfix/sender_relay /etc/postfix/sender_relay.db
sudo systemctl restart postfix

Настройка DKIM-подписи

DKIM (DomainKeys Identified Mail) — криптографическая подпись, подтверждающая, что письмо действительно отправлено с вашего домена и не было изменено. Без DKIM настройка Postfix Битрикс будет неполной — письма часто попадают в спам.

Установка OpenDKIM

sudo apt-get install opendkim opendkim-tools
sudo mkdir -p /etc/opendkim/keys/yourdomain.com

Генерация ключей

sudo opendkim-genkey -b 2048 -d yourdomain.com -D /etc/opendkim/keys/yourdomain.com -s mail -v
sudo chown opendkim:opendkim /etc/opendkim/keys/yourdomain.com/mail.private

Конфигурация OpenDKIM

Отредактируйте /etc/opendkim.conf:

AutoRestart             Yes
AutoRestartRate         10/1h
Syslog                  Yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
Mode                    sv
SubDomains              no
OversignHeaders         From
KeyTable                /etc/opendkim/key.table
SigningTable             refile:/etc/opendkim/signing.table
ExternalIgnoreList      /etc/opendkim/trusted.hosts
InternalHosts           /etc/opendkim/trusted.hosts
Socket                  inet:8891@localhost

Создайте вспомогательные файлы:

# /etc/opendkim/key.table
mail._domainkey.yourdomain.com yourdomain.com:mail:/etc/opendkim/keys/yourdomain.com/mail.private

# /etc/opendkim/signing.table
*@yourdomain.com mail._domainkey.yourdomain.com

# /etc/opendkim/trusted.hosts
127.0.0.1
localhost
yourdomain.com

Интеграция OpenDKIM с Postfix

Добавьте в /etc/postfix/main.cf:

# OpenDKIM milter
milter_protocol = 6
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891

Перезапустите оба сервиса:

sudo systemctl restart opendkim
sudo systemctl restart postfix

Добавление DNS-записей

Получите публичный ключ DKIM для добавления в DNS:

sudo cat /etc/opendkim/keys/yourdomain.com/mail.txt

Добавьте эту TXT-запись в DNS вашего домена. Также убедитесь, что настроены SPF и DMARC записи:

# SPF-запись (TXT для yourdomain.com)
v=spf1 ip4:YOUR_SERVER_IP include:_spf.yoursmtp.com ~all

# DMARC-запись (TXT для _dmarc.yourdomain.com)
v=DMARC1; p=quarantine; rua=mailto:dmarc@yourdomain.com; fo=1

Настройка SMTP на стороне 1С-Битрикс

Способ 1: Через административную панель (рекомендуемый)

Если версия модуля main — 21.900.0 или выше, используйте встроенные настройки SMTP. Это самый безопасный и удобный способ. Откройте Настройки → Настройки продукта → Почтовые и СМС события → Настройки SMTP и укажите параметры SMTP-сервера. При необходимости — привяжите разные SMTP-подключения к разным адресам отправителей.

Способ 2: Через custom_mail() в init.php

Для сложных сценариев (когда нужен полный контроль над процессом отправки) определите функцию custom_mail() в файле /bitrix/php_interface/init.php. Поскольку bxmail() всегда проверяет наличие custom_mail() перед вызовом mail(), это позволяет использовать PHPMailer или другую библиотеку:

function custom_mail(
    $to, $subject, $message, $additional_headers = '', $additional_parameters = ''
) {
    // Подключаем PHPMailer (установите через composer)
    $mail = new PHPMailerPHPMailerPHPMailer(true);

    $mail->isSMTP();
    $mail->Host       = getenv('SMTP_HOST') ?: 'smtp.yourdomain.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = getenv('SMTP_USER') ?: 'noreply@yourdomain.com';
    $mail->Password   = getenv('SMTP_PASS') ?: '';
    $mail->SMTPSecure = PHPMailerPHPMailerPHPMailer::ENCRYPTION_STARTTLS;
    $mail->Port       = 587;
    $mail->CharSet    = 'UTF-8';

    // Парсим заголовки для определения From
    if (preg_match('/From:s*(.+)/i', $additional_headers, $m)) {
        $mail->setFrom(trim($m[1]));
    }

    $mail->addAddress($to);
    $mail->Subject = $subject;
    $mail->isHTML(true);
    $mail->Body = $message;

    return $mail->send();
}

Обратите внимание на безопасность: учётные данные SMTP хранятся в переменных окружения (getenv()), а не в коде. Задайте их в .env-файле или в конфигурации веб-сервера.

Проверка и отладка

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

Проверьте работу Postfix из командной строки:

echo "Тестовое письмо Postfix" | mail -s "Test Postfix + Bitrix" test@example.com

Просмотр логов

Логи Postfix содержат полную информацию о каждом отправленном письме:

# Последние 50 строк логов почтового сервера
sudo tail -n 50 /var/log/mail.log

# Фильтрация по конкретному получателю
sudo grep "to=<user@example.com>" /var/log/mail.log

# Состояние очереди писем
sudo postqueue -p

Частые ошибки и их решение

SASL authentication failed — неверные учётные данные в /etc/postfix/sasl_passwd. Проверьте логин и пароль, пересоздайте хэш-карту командой sudo postmap /etc/postfix/sasl_passwd.

Connection timed out — порт 587 (или 465) заблокирован файрволом. Проверьте правила исходящих соединений: sudo ufw allow out 587/tcp.

relay access denied — SMTP-сервер отклоняет соединение. Убедитесь, что relayhost указан в квадратных скобках: [smtp.server.com]:587.

DKIM-Signature verification failed — несоответствие между DNS-записью DKIM и приватным ключом. Пересгенерируйте ключи и обновите DNS.

Заключение

Настройка Postfix Битрикс — это надёжный способ обеспечить стабильную доставку писем из CRM, рассылок и системных уведомлений. Правильно выполненная настройка Postfix Битрикс с SASL-аутентификацией, TLS-шифрованием и DKIM-подписью значительно повышает репутацию вашего домена и снижает вероятность попадания писем в спам. Как мы показали в этом руководстве, настройка Postfix Битрикс не требует глубоких знаний — достаточно внимательно следовать инструкциям.

Если настройка Postfix Битрикс кажется сложной или вы не хотите тратить на это время — мы готовы помочь. Компания IT For Prof предоставляет услуги корпоративной почты под ключ, а также сопровождение серверов Битрикс24 и администрирование серверов любой сложности.

Часто задаваемые вопросы

Почему письма из Битрикса попадают в спам?

Чаще всего причина в отсутствии DKIM-подписи, некорректной SPF-записи или отправке через стандартную PHP-функцию mail() без аутентификации. Настройка Postfix с SMTP-релеем, DKIM и корректными DNS-записями решает эту проблему.

Можно ли настроить SMTP в Битрикс24 без Postfix?

Да. Начиная с версии 21.900.0 модуля main, в Битрикс доступна встроенная настройка SMTP через административную панель. Для активации нужно включить опцию smtp в файле .settings.php. Postfix нужен, когда требуется DKIM-подпись на уровне сервера, маршрутизация по отправителю или централизованное управление почтой.

Как отправлять письма с разных доменов через разные SMTP-серверы?

Используйте директиву sender_dependent_relayhost_maps в Postfix. Она позволяет маршрутизировать письма по адресу отправителя. Важно: transport_maps маршрутизирует по получателю, а не по отправителю — это частая ошибка.

Как проверить, работает ли DKIM после настройки?

Отправьте тестовое письмо на Gmail или воспользуйтесь сервисом mail-tester.com. В заголовках письма должно быть поле DKIM-Signature, а в результатах проверки — DKIM: pass. Также полезна команда: opendkim-testkey -d yourdomain.com -s mail -vvv

Что лучше: Postfix или Exim для сервера Битрикс?

Postfix — стандартный выбор для серверов 1С-Битрикс благодаря простоте настройки, безопасности по умолчанию и отличной совместимости с SASL и DKIM. Exim более гибок в маршрутизации, но сложнее в конфигурации. Для типовых задач Битрикса Postfix — оптимальный выбор.