Статьи и кейсы

Настройка Postfix для 1С-Битрикс: Управление сайтом и коробочных версий Битрикс24

Кейсы
Основной Процесс Отправки Писем в Битрикс
В продуктах 1С-Битрикс используется глобальная функция bxmail, которая вызывает стандартную функцию mail языка PHP, оборачивая письмо заголовками. По умолчанию, все письма (рассылки, CRM, письма для восстановления пароля, роботы и т.д.) уходят в один поток через функцию mail.
Преимущества Использования SMTP-Сервера
  • Разделение потоков;
  • Использование алиасов (alias);
  • Простота настройки;
  • Возможность отладки;
  • Возможность отправки на хитах;
  • Возможность держать подключение открытым (полезно для массовых рассылок).
Настройка Postfix

1. Установка Postfix
sudo apt-get update
sudo apt-get install postfix

2. Конфигурация Postfix
Отредактируйте основной конфигурационный файл Postfix:
sudo nano /etc/postfix/main.cf

Укажите ваш SMTP-сервер и порт:
relayhost = [smtp.yourserver.com]:587

3. Настройка Аутентификации
Создайте файл с информацией для аутентификации на вашем SMTP-сервере:
sudo nano /etc/postfix/sasl_passwd

и добавьте в него следующую строку:
[smtp.yourserver.com]:587 username:password

4. Обновление Параметров Безопасности и Перезагрузка Postfix
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd
sudo systemctl restart postfix

5. Настройка Автоматической Подписи Сообщений DKIM
Установите необходимые пакеты и сгенерируйте ключи:
sudo apt-get install opendkim opendkim-tools
opendkim-genkey -t -s mail -d yourdomain.com

Настройте DKIM в Postfix:
sudo nano /etc/opendkim.conf

Возможность Автоматического Выбора SMTP Сервера
Для реализации автоматического выбора SMTP сервера в зависимости от адреса отправителя, можно использовать транспортные карты Postfix. В /etc/postfix/transport:
user1@yourdomain.com smtp:[smtp.yourserver1.com]
user2@yourdomain.com smtp:[smtp.yourserver2.com]

Аналогично можно сделать для всего домена
example.com smtp:[smtp.example.com]:587
example2.com smtp:[smtp.example2.com]:587

Затем примените настройки:
sudo postmap /etc/postfix/transport
sudo systemctl restart postfix
Заключение
Теперь, при отправке почты с разных доменов, Postfix будет автоматически выбирать соответствующий SMTP сервер для отправки писем, в соответствии с настройками, указанными в транспортной карте. Это позволяет гибко управлять маршрутами отправки писем и оптимизировать использование ресурсов почтовых серверов.

Для того чтобы в продуктах на платформе 1С-Битрикс (включая "1С-Битрикс: Управление сайтом" и коробочные версии "Битрикс24") настроить автоматический выбор SMTP сервера в зависимости от домена отправителя, вам понадобится воспользоваться программным методом. В качестве примера, можно использовать событие, которое будет отслеживать отправку письма и, в зависимости от адреса отправителя, изменять настройки SMTP.

Вот как это можно реализовать:

Шаг 1: Регистрация Обработчика События
Создайте обработчик события для изменения параметров отправки письма перед его отправкой. Для этого в файле /bitrix/php_interface/init.php (если такого файла нет, создайте его) разместите следующий код:
AddEventHandler('main', 'OnBeforeEventSend', 'ChangeSMTPSettings');

Этот код регистрирует обработчик события OnBeforeEventSend с именем функции ChangeSMTPSettings
.
Шаг 2: Создание Функции Обработчика
В том же файле /bitrix/php_interface/init.php определите функцию ChangeSMTPSettings. Эта функция будет вызываться перед каждой отправкой письма и будет изменять настройки SMTP в зависимости от домена отправителя:
function ChangeSMTPSettings(&$arFields, &$arTemplate)
{
if (preg_match('/@example.com$/', $arFields['FROM'])) {
// Настройки SMTP для домена example.com
COption::SetOptionString('main', 'smtp_server', 'smtp.example.com');
COption::SetOptionString('main', 'smtp_port', '587');
COption::SetOptionString('main', 'smtp_login', 'login@example.com');
COption::SetOptionString('main', 'smtp_password', 'password');
} elseif (preg_match('/@example2.com$/', $arFields['FROM'])) {
// Настройки SMTP для домена example2.com
COption::SetOptionString('main', 'smtp_server', 'smtp.example2.com');
COption::SetOptionString('main', 'smtp_port', '587');
COption::SetOptionString('main', 'smtp_login', 'login@example2.com');
COption::SetOptionString('main', 'smtp_password', 'password');
}
}

Шаг 3: Проверка Работы

Теперь при каждой отправке письма через Битрикс будет вызываться ваша функция ChangeSMTPSettings. Эта функция будет проверять адрес отправителя и, в зависимости от его домена, применять соответствующие настройки SMTP.

Пожалуйста, обратите внимание:

Безопасность: Хранение паролей прямо в коде — не лучшая практика с точки зрения безопасности. Рассмотрите возможность использования более безопасного метода хранения паролей.
Производительность: Этот метод будет изменять настройки SMTP перед каждой отправкой письма, что может повлиять на производительность системы при массовых рассылках.
Кэширование: Возможно, потребуется сбросить кэш Битрикс после добавления/изменения этого кода.

Этот метод предоставляет гибкую систему для контроля настроек SMTP в Битрикс на уровне программирования.
Made on
Tilda