Используемые термины: Linux , Битрикс24 , Postfix , PHP , DNS , DKIM , SPF , DMARC , SMTP , PTR , MX .
По умолчанию, после развертывания коробки Битрикс24 отправка почты (или почтовых уведомлений) не работает или письма постоянно попадают в СПАМ. Мы рассмотрим комплекс мероприятий, которые помогут настроить локальный SMTP-сервер и решить данную проблему полностью или в большей степени. Работать будем с системой на базе Linux.
Настраиваем почтовый сервер
Настройки для домена
Запуск cron
Отправка письма из PHP-строки
Подключаем ящик к битрикс24
Отладка отправки
Пересылка через другие почтовые системы (с помощью msmtp)
Решение проблем
Дополнительные материалы
Настройка сервера
Мы будем использовать локальный MTA на базе Postfix. Наш сервер должен иметь правильное имя — его можно задать командой:
hostnamectl set-hostname mail.remontka.com
* заданное имя должно разрешаться через DNS в IP-адрес нашего сервера.
Postfix может быть не установлен в нашей системе, поэтому сначала выполним его инсталляцию.
а) на сервере CentOS:
yum install postfix cyrus-sasl-plain
б) на сервере Ubuntu или Debian:
apt-get install postfix cyrus-imapd cyrus-clients cyrus-doc cyrus-admin sasl2-bin
После установки разрешаем автозапуск Postfix.
Вводим команду:
systemctl enable postfix —now
Открываем конфигурационный файл нашего mta:
vi /etc/postfix/main.cf
Находим не закомментированную строку:
inet_interfaces = localhost
* значение для inet_interfaces может быть не только localhost .
… и меняем ее значение на:
inet_interfaces = all
Также находим:
inet_protocols = all
И меняем на:
inet_protocols = ipv4
* однако, если мы используем IPv6, то менять значение не нужно.
Настраиваем домен. Для этого задаем в качестве значения для mydomain наш домен, с которого будем отправлять письма, а для myorigin указываем ссылаться на значение mydomain :
mydomain = remontka.com
…
myorigin = $mydomain
* где remontka.com — мой домен, который я буду использовать в инструкции в качестве примера.
Задаем максимальный размер отправляемого сообщения:
message_size_limit = 52428800
* в данном примере мы задали лимит в 50 Мб .
Указываем серверу передавать сообщения по зашифрованному каналу:
smtp_use_tls = yes
После внесения настроек перезапускаем postfix для их применения:
systemctl restart postfix
Теперь создаем/редактируем файл с настройками для PHP, который переопределяет некоторые настройки по умолчанию. В зависимости от системы, его расположение будет отличаться.
а) на CentOS:
vi /etc/php.d/z_bx_custom_settings.ini
б) на Ubuntu / Debian:
vi /etc/php/8.2/apache2/conf.d/99-bitrix.ini
* где 8.2 — версия используемого PHP.
Содержимое для разных систем одинаковое.
Добавляем строку с опцией sendmail_path
mail.add_x_header = Off
expose_php = Off
sendmail_path = /usr/sbin/sendmail -t -i
* где:
- add_x_header — позволяет добавлять при отправке письма с помощью функции mail() заголовок X-PHP-Originating-Script;
- expose_php — идентифицирует отправляемое письмо, что оно было сформировано с помощью PHP. Так как присутствие в письме данной информации может привести к негативной реакции со стороны антиспам систем, отключаем ее вывод.
- sendmail_path — путь до исполняемого файла mta.
Перезапускаем веб-сервер обработки php.
а) на CentOS:
systemctl restart httpd
б) на Ubuntu / Debian:
systemctl restart apache2
Проверяем, что у нас в системе в качестве MTA по умолчанию выбран Postfix. Вводим команду:
update-alternatives —config mta
Если мы получим ошибку:
update-alternatives: ошибка: нет альтернатив для mta
… значит у нас нет никаких других MTA, кроме postfix. Идем дальше.
Указываем, какой MTA должен использоваться по умолчанию:
Selection Command
————————————————
*+ 1 /usr/bin/msmtp
2 /usr/sbin/sendmail.postfix
В нашем примере, выбираем 2 (postfix):
Enter to keep the current selection[+], or type selection number: 2
Настройка домена
Для того, чтобы письма проходили проверки на СПАМ, необходимо убедиться в корректной настройке DNS для нашего домена, от которого выполняется отправка.
A-запись
Ранее мы задавали имя серверу. На NS нам нужно добавить соответствующую запись типа А, например:
mail.remontka.com A 90.90.90.90
SPF
Определяет, с каких серверов можно отправлять почту для нашего домена.
Пример:
v=spf1 +a +mx ip4:93.93.93.93 -all
* в данном примере мы разрешаем отправку с сервера с IP адресов домена, для сервера MX и с IP 93.93.93.93. Остальные письма должны восприниматься как нелегитимные.
DKIM
Данная запись включает в себя ключ для дешифровки специального заголовка, отправляемого с письмом. Если проверяющая сторона сможет это сделать, значит письмо отправил владелец домена.
Для настройки DKIM необходимо установить соответствующие пакеты на сервер, настроить его и добавить записи в DNS.
Подробнее, про настройку DKIM + Postfix .
DMARC
Определяет, что делать с письмами, которые не прошли проверку DKIM и SPF.
Тип записи: TXT.
Значение: _dmarc.
Пример записи:
v=DMARC1; p=quarantine; sp=none; pct=100; fo=0; rua=mailto:postmaster@remontka.com
* данная политика укажет, что почту, которая не прошла проверку, необходимо поместить в карантин.
PTR
Это обратная запись для внешнего IP-адеса, на котором работает почтовый сервер. Она должна совпадать с именем, которым представляется почтовый сервер (как правило, это имя сервера или его hostname).
Прописывается у провайдера, который предоставляет Интернет (или поставщик МЗЫ)ю
Пример записи:
93.93.93.95.in-addr.arpa name = mail.remontka.com
* указываем, что имя узла для IP-адреса 95.93.93.93 должно быть mail.remontka.com .
MX
Для домена должна быть определена MX-запись, которая указывает на адрес почтового сервера. В противном случае, к домену не будет доверия.
Пример записи:
MX preference = 10, mail exchanger = mail1.remontka.com
MX preference = 20, mail exchanger = mail2.remontka.com
* в данном примере указано 2 почтовых сервера для домена remontka.com . Более приоритетный mail1.remontka.com .
Настройка cron
Чтобы письма отправлялись, нужно, чтобы работал cron для битрикс24. Открываем конфигурационный файл:
vi /home/bitrix/www/bitrix/php_interface/dbconn.php
Проверяем, чтобы была строка:
define(‘BX_CRONTAB_SUPPORT’, true);
Открываем на редактирование crontab (для пользователя bitrix):
crontab -e -u bitrix
Добавляем задание:
* * * * * /usr/bin/php -f /home/bitrix/www/bitrix/modules/main/tools/cron_events.php
* в данном примере мы запускаем на исполнение скрипт /home/bitrix/www/bitrix/modules/main/tools/cron_events.php каждую минуту.
Тестовая отправка письма из командной PHP-строки
Проверим, что мы настроили наш сервер для отправки корректно. Переходим в административную консоль Битрикс24 — Инструменты — Командная PHP-строка .
Вводим код:
$headers = «From: info@{$_SERVER[‘SERVER_NAME’]}rn» .
«Reply-To: bitrix@{$_SERVER[‘SERVER_NAME’]}rn» .
«X-Mailer: PHP/» . phpversion();
if(mail(«master@remontka.com», «Письмо для проверки», «Тестовое сообщение», $headers) ) {
echo «Сообщение отправлено!»;
} else {
echo «Ошибка! Проверьте настройки почтового сервера и его лог (/var/log/maillog)»;
}
* где master@remontka.com — адрес почтового ящика, на который будет отправлено тестовое сообщение.
Нажимаем кнопку Выполнить и подтверждаем во всплывающем окне наши намерения запустить на исполнение скрипт. Мы должны получить ответ: «Сообщение отправлено!». В противном случае, изучаем логи.
Подключение ящика
Для подключения к ящику заходим в битрикс 24 под пользователем. Слева переходим в Почта :
Среди поставщиков услуг выбираем подходящий вариант или IMAP :
Заполняем поля для подключения (остальные галочки можно выставить по желанию):
* точные настройки необходимо уточнить у администратора почтового сервера. Также их можно посмотреть на странице инструкции соответствующего поставщика.
Отмечаем галочками папки для синхронизации:
Готово. Можно отправлять письма из битрикс.
Проверка и анализ
Существуют различные онлайн сервисы, где мы можем проверить корректность настройки нашего сервера и DNS:
1. Анализ письма. Данные сервисы предлагают отправить письмо на определенный адрес, после будет выполнен онлайн анализ.
В качестве примера приведу два — mail-tester.com и spamtest.smtp.bz .
2. Наличие почтового сервера в черных списках. Позволяет узнать, не был ли добавлен наш сервер в черные списки. Если сервер туда попал, то необходимо найти специальную страницу для удаления из блока и создать заявку онлайн.
Пример сервисов — dnsbl.smtp.bz , 2ip.ru , dnsbl.info и syslab.ru .
3. Проверка репутации домена. Позволяет понять, правильно ли настроен наш домен.
Сервис — mxtools .
Также, для решения проблем на самом сервере необходимо использовать лог почты. Его можно смотреть командой:
tail -f /var/log/maillog
С его помощью можно найти ошибки и понять, почему не отправляются письма.
Отправка через разные почтовые системы
На нашем сервере Битрикс24 могут быть заведены пользователи, чья почта находится на различных почтовых хостингах, например, mail.ru, Яндекс, GMAIL и так далее. Для отправки почты таким образом, мы должны сделать 2 вещи:
- Настроить правило пересылки почты через другие системы.
- Пропускать отправку писем через msmtp.
Рассмотрим оба шага по-отдельности.
Пересылка почты
Пересылка настраивается с помощью правил почтового сервера postfix. Для этого настраивается опция sender_dependent_relayhost_maps.
Подробнее, на примере отправки писем через Яндекс, описан процесс настройки в инструкции Отправка почты от Postfix через почтовый сервер Яндекса .
Использование msmtp
Снова открываем файл z_bx_custom_settings.ini:
vi /etc/php.d/z_bx_custom_settings.ini
Комментируем опцию sendmail_path и добавляем новую строку:
…
#sendmail_path = /usr/sbin/sendmail -t -i
sendmail_path = /usr/bin/msmtp -t -i —read-envelope-from
* обратите внимание, что теперь мы отправляем письма через приложение /usr/bin/msmtp . Также мы добавляем опцию —read-envelope-from , которая будет в качестве отправителя подставлять содержимое заголовка reply-to.
Открываем файл:
vi /home/bitrix/.msmtprc
Комментируем строку, начинающуюся на from :
#from …
Если файл окажется пустым, то добавляем такие строки:
# smtp account configuration for default
account default
logfile /home/bitrix/msmtp_default.log
host 127.0.0.1
port 25
keepbcc off
auth off
Перезапускаем веб-сервер:
systemctl restart httpd
Можно отправлять почту.
Возможные проблемы
Рассмотрим некоторые проблемы, с которыми пришлось столкнуться автору.
Заголовки Return-Path и envelope-from
В заголовки письма Return-Path и envelope-from попадает неправильный адрес. Не страшно, если это будет другой отправитель (адрес до собаки), и намного хуже, если в заголовке неправильный домен. Антиспам системы учитывают адресацию для всех заголовков и начинают выполнять проверки легитимности использования домена. Это и может приводить к попаданию писем в СПАМ.
Причина:
Такое поведение наблюдается из-за отсутствия явных заголовков, которые должны были бы выставляться самим Битрикс24, поэтому его дописывает сервер отправки, добавляя имя сервера или значение параметра myhostname. Очень часто данные значения не соответствуют домену отправки.
Решение:
Открываем файл:
vi /etc/php.d/bitrixenv.ini
Редактируем директиву sendmail_path :
sendmail_path = sendmail -t -i -f bitrix@remontka.com
* мы добавили опцию отправки -f bitrix@remontka.com — именно этот адрес будет подставляться в заголовки Return-Path и envelope-from .
Чтобы настройки применились, перезапускаем веб-сервер:
systemctl restart httpd
Читайте также
Также вас может заинтересовать:
1. Настройка почтового сервера для массовой рассылки сообщений .
2. Настройка почты GMAIL и Яндекс для подключения по IMAP или POP3 .