Другое

BitrixVM 9: Настройка SMTP для разных доменов

Решаем проблему отправки почты через дефолтный SMTP аккаунт в BitrixVM 9. Настройка правильной маршрутизации писем для разных доменов.

Почему BitrixVM 9 всегда отправляет почту через конфигурацию SMTP-аккаунта по умолчанию?

На моем сервере размещено несколько сайтов, но исходящая почта с этих сайтов почему-то отправляется с заголовками аккаунта по умолчанию из файла .msmtprc. В этом файле я настроил отдельные SMTP-аккаунты для каждого домена, но в основном логи пишутся в файл msmtp_default.log, а в заголовках писем присутствует домен, указанный по умолчанию в .msmtprc.

Вот моя конфигурация:

Конфигурация SMTP-аккаунта по умолчанию

account default
logfile /home/bitrix/msmtp_default.log
host 127.0.0.1
port 25
from info@site1.ru
keepbcc off
auth off

Конфигурация SMTP-аккаунта для site2.ru

account site2.ru
logfile /home/bitrix/msmtp_site2.ru.log
host 127.0.0.1
port 25
from info@site2.ru
aliases /etc/aliases
keepbcc off
auth off

Конфигурация SMTP-аккаунта для site3.ru

account site3.ru
logfile /home/bitrix/msmtp_site3.ru.log
host 127.0.0.1
port 25
from info@site3.ru
aliases /etc/aliases
keepbcc off
auth off

Что я делаю не так?

BitrixVM 9 всегда отправляет почту через конфигурацию SMTP-аккаунта по умолчанию, потому что в вашей конфигурации msmtp не указано, как автоматически определять, какой аккаунт использовать для конкретного домена. По умолчанию msmtp использует account default для всех писем, если не указан явный параметр выбора аккаунта.

Содержание

Основные причины проблемы

Проблема возникает из-за того, как msmtp обрабатывает отправку писем в BitrixVM. Ваша текущая конфигурация определяет:

  1. Аккаунт по умолчанию - account default с from info@site1.ru
  2. Отдельные аккаунты для других доменов - account site2.ru и account site3.ru

Однако BitrixVM (и приложения, работающие на нем) не передают msmtp информацию о том, какой именно аккаунт использовать для отправки. Вместо этого они просто вызывают msmtp без указания параметров, в результате чего всегда используется аккаунт по умолчанию.

Как объясняется в документации по msmtp, без явного указания аккаунта msmtp всегда использует account default.

Автоматическое определение домена в msmtp

Для решения проблемы нужно настроить msmtp на автоматическое определение подходящего SMTP-аккаунта на основе домена отправителя. Это можно сделать несколькими способами:

1. Использование параметра account в вызове

Самый надежный способ - явно указывать аккаунт при вызове msmtp. BitrixVM можно настроить на передачу этого параметра.

2. Настройка алиасов и маршрутизации

Как упоминается в обсуждении на ComputerBase, msmtp может использовать разные механизмы определения получателя.

3. Использование from_override

В вашей конфигурации установлено allow_from_override off, что мешает переопределить отправителя через параметры вызова.

Настройка правильной маршрутизации писем

Чтобы исправить ситуацию, перенастройте ваш файл .msmtprc следующим образом:

bash
# Конфигурация SMTP-аккаунта по умолчанию (оставим, но без from)
account default
logfile /home/bitrix/msmtp_default.log
host 127.0.0.1
port 25
# Уберем from из дефолтного аккаунта
keepbcc off
auth off

# Конфигурация SMTP-аккаунта для site1.ru
account site1.ru
logfile /home/bitrix/msmtp_site1.ru.log
host 127.0.0.1
port 25
from info@site1.ru
aliases /etc/aliases
keepbcc off
auth off

# Конфигурация SMTP-аккаунта для site2.ru
account site2.ru
logfile /home/bitrix/msmtp_site2.ru.log
host 127.0.0.1
port 25
from info@site2.ru
aliases /etc/aliases
keepbcc off
auth off

# Конфигурация SMTP-аккаунта для site3.ru
account site3.ru
logfile /home/bitrix/msmtp_site3.ru.log
host 127.0.0.1
port 25
from info@site3.ru
aliases /etc/aliases
keepbcc off
auth off

Теперь настройте BitrixVM на использование правильного аккаунта. Это можно сделать через:

  1. Изменение настроек почты в Bitrix24 - указать для каждого сайта свой SMTP-аккаунт
  2. Настройку глобального почтового шаблона - использовать разные отправители для разных доменов
  3. Редактирование системных файлов BitrixVM

Конфигурация для BitrixVM

BitrixVM использует msmtp через системные настройки. Чтобы настроить автоматическое определение домена:

1. Проверьте текущие настройки почты

Выполните команду:

bash
grep -r "msmtp" /etc/bitrix/*
grep -r "MAIL_" /etc/php*/php.ini
grep -r "sendmail_path" /etc/php*/php.ini

2. Настройте PHP для использования правильного msmtp

В файле /etc/php*/php.ini измените параметр:

ini
sendmail_path = /usr/bin/msmtp -t

На:

ini
sendmail_path = /usr/bin/msmtp -t --account=default

Для разных доменов потребуется создавать разные конфигурации PHP или использовать скрипт-обертку.

3. Создайте скрипт-обертку для msmtp

Создайте файл /usr/local/bin/msmtp-wrapper:

bash
#!/bin/bash
DOMAIN=$(echo $1 | grep -o '@[^@]*' | tr -d '@')
if [ -z "$DOMAIN" ]; then
    DOMAIN="site1.ru"
fi

ACCOUNT=$(grep "account $DOMAIN" /home/bitrix/.msmtprc | awk '{print $2}')
if [ -z "$ACCOUNT" ]; then
    ACCOUNT="default"
fi

exec /usr/bin/msmtp --account=$ACCOUNT "$@"

Сделайте его исполняемым:

bash
chmod +x /usr/local/bin/msmtp-wrapper

И измените sendmail_path в php.ini:

ini
sendmail_path = /usr/local/bin/msmtp-wrapper -t

Проверка и решение проблем

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

Проверьте отправку для каждого домена:

bash
# Для site2.ru
echo "Тестовое письмо" | msmtp --account=site2.ru test@site2.ru

# Для site3.ru  
echo "Тестовое письмо" | msmtp --account=site3.ru test@site3.ru

2. Проверка логов

Проверьте соответствующие лог-файлы:

bash
tail -f /home/bitrix/msmtp_site2.ru.log
tail -f /home/bitrix/msmtp_site3.ru.log

3. Проверка заголовков

Посмотрите заголовки отправленных писем. Они должны содержать правильный From: и Return-Path:.

Альтернативные подходы

1. Использование Postfix вместо msmtp

BitrixVM позволяет переключиться на использование Postfix:

bash
bitrix-vm-setup --mail-server=postfix

Postfix автоматически обрабатывает разные домены без дополнительных настроек.

2. Настройка алиасов в /etc/aliases

Как упоминается в исследованиях, можно настроить алиасы для автоматического маршрутизации:

bash
# /etc/aliases
info-site2: info@site2.ru
info-site3: info@site3.ru

3. Использование разных файлов конфигурации

Для каждого сайта создайте отдельный файл конфигурации msmtp:

bash
# /home/bitrix/.msmtprc.site2
account site2_ru
logfile /home/bitrix/msmtp_site2.ru.log
host 127.0.0.1
port 25
from info@site2.ru
auth off

# Использование: msmtp --config=/home/bitrix/.msmtprc.site2 -t

Заключение

Проблема с отправкой почты через дефолтный аккаунт возникает из-за того, что BitrixVM не передает информацию о домене отправителя в msmtp. Основные решения:

  1. Использование скрипта-обертки - автоматически определяет подходящий SMTP-аккаунт на основе домена
  2. Явное указание аккаунта - в настройках каждого сайта Bitrix24 указывать соответствующий SMTP-аккаунт
  3. Переключение на Postfix - более надежное решение для работы с множеством доменов

Для быстрого решения рекомендую использовать скрипт-обертку, который будет автоматически определять домен из адреса отправителя и выбирать соответствующий SMTP-аккаунт. Это обеспечит правильную отправку писем с использованием соответствующих доменов в заголовках.

Источники

  1. ComputerBase Forum - Debian: msmtp und aliases richtig mit Gmail konfigurieren
  2. Typo3 Core Changelog - Add mail configuration for setting smtp domain
  3. Plesk Forum - not sending via external SMTP (msmtp + Office365)
  4. Forward Email - NAS Email Setup Guide
  5. OpenProvider - Managing multiple domains on one host
Авторы
Проверено модерацией
Модерация