Настройка 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(). Она работает по следующему алгоритму:
- Проверяет, определена ли пользовательская функция
custom_mail() - Если
custom_mail()существует — вызывает её, передавая все параметры письма - Если
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 — оптимальный выбор.

