Настройка корректной отправки почты в Битрикс24

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: Linux, Битрикс24, Postfix, PHP, DNSDKIM, SPF, DMARC, SMTPPTR, MX.

По умолчанию, после развертывания коробки Битрикс24 отправка почты (или почтовых уведомлений) не работает или письма постоянно попадают в СПАМ. Мы рассмотрим комплекс мероприятий, которые помогут настроить локальный SMTP-сервер и решить данную проблему полностью или в большей степени. Работать будем с системой на базе Linux.

Настройка сервера

Мы будем использовать локальный MTA на базе Postfix. Наш сервер должен иметь правильное имя — его можно задать командой:

hostnamectl set-hostname mail.dmosk.ru

* заданное имя должно разрешаться через DNS в IP-адрес нашего сервера.

Postfix может быть не установлен в нашей системе, поэтому сначала выполним его инсталляцию.

а) на сервере CentOS:

yum install postfix cyrus-sasl-plain

б) на сервере Ubuntu:

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 = dmosk.ru
...
myorigin = $mydomain

* где dmosk.ru — мой домен, который я буду использовать в инструкции в качестве примера.

Задаем максимальный размер отправляемого сообщения:

message_size_limit = 52428800

* в данном примере мы задали лимит в 50 Мб.

Указываем серверу передавать сообщения по зашифрованному каналу:

smtp_use_tls = yes

После внесения настроек перезапускаем postfix для их применения:

systemctl restart postfix

Теперь создаем файл с настройками для PHP, который переопределяет некоторые настройки по умолчанию:

vi /etc/php.d/z_bx_custom_settings.ini

Добавляем строку с опцией 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: 

systemctl restart httpd

Проверяем, что у нас в системе в качестве MTA по умолчанию выбран Postfix. Вводим команду:

update-alternatives --config mta

Если мы увидим, что у нас не используется postfix (напротив него должен быть +), то меняем значение:

  Selection    Command
-----------------------------------------------
*+ 1           /usr/bin/msmtp
   2           /usr/sbin/sendmail.postfix

В нашем примере, выбираем 2:

Enter to keep the current selection[+], or type selection number: 2

Настройка домена

Для того, чтобы письма проходили проверки на СПАМ, необходимо убедиться в корректной настройке DNS для нашего домена, от которого выполняется отправка.

A-запись

Ранее мы задавали имя серверу. На NS нам нужно добавить соответствующую запись типа А, например:

mail.dmosk.ru   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@dmosk.ru

* данная политика укажет, что почту, которая не прошла проверку, необходимо поместить в карантин.

PTR

Это обратная запись для внешнего IP-адеса, на котором работает почтовый сервер. Она должна совпадать с именем, которым представляется почтовый сервер (как правило, это имя сервера или его hostname).

Прописывается у провайдера, который предоставляет Интернет (или поставщик МЗЫ)ю

Пример записи:

93.93.93.95.in-addr.arpa       name = mail.dmosk.ru

* указываем, что имя узла для IP-адреса 95.93.93.93 должно быть mail.dmosk.ru.

MX

Для домена должна быть определена MX-запись, которая указывает на адрес почтового сервера. В противном случае, к домену не будет доверия.

Пример записи:

MX preference = 10, mail exchanger = mail1.dmosk.ru
MX preference = 20, mail exchanger = mail2.dmosk.ru

* в данном примере указано 2 почтовых сервера для домена dmosk.ru. Более приоритетный mail1.dmosk.ru.

Настройка 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']}\r\n" .
    "Reply-To: bitrix@{$_SERVER['SERVER_NAME']}\r\n" .
    "X-Mailer: PHP/" . phpversion();
if(mail("master@dmosk.ru", "Письмо для проверки", "Тестовое сообщение", $headers) ) {
    echo "Сообщение отправлено!";
} else {
    echo "Ошибка! Проверьте настройки почтового сервера и его лог (/var/log/maillog)";
}

* где master@dmosk.ru — адрес почтового ящика, на который будет отправлено тестовое сообщение.

Нажимаем кнопку Выполнить и подтверждаем во всплывающем окне наши намерения запустить на исполнение скрипт. Мы должны получить ответ: «Сообщение отправлено!». В противном случае, изучаем логи.

Подключение ящика

Для подключения к ящику заходим в битрикс 24 под пользователем. Слева переходим в Почта:

Переходим к работе с почтой в битрикс 24

Среди поставщиков услуг выбираем подходящий вариант или IMAP:

Переходим к настройкам IMAP

Заполняем поля для подключения (остальные галочки можно выставить по желанию):

Заполняем поля для подключения к почтовому ящику

* точные настройки необходимо уточнить у администратора почтового сервера. Также их можно посмотреть на странице инструкции соответствующего поставщика.

Отмечаем галочками папки для синхронизации:

Выбираем почтовые папки для синхронизации

Готово. Можно отправлять письма из битрикс.

Проверка и анализ

Существуют различные онлайн сервисы, где мы можем проверить корректность настройки нашего сервера и DNS:

1. Анализ письма. Данные сервисы предлагают отправить письмо на определенный адрес, после будет выполнен онлайн анализ.

В качестве примера приведу два — mail-tester.com и spamtest.smtp.bz.

2. Наличие почтового сервера в черных списках. Позволяет узнать, не был ли добавлен наш сервер в черные списки. Если сервер туда попал, то необходимо найти специальную страницу для удаления из блока и создать заявку онлайн.

Пример сервисов — dnsbl.smtp.bz2ip.rudnsbl.info и syslab.ru.

3. Проверка репутации домена. Позволяет понять, правильно ли настроен наш домен.

Сервис — mxtools.

Также, для решения проблем на самом сервере необходимо использовать лог почты. Его можно смотреть командой:

tail -f /var/log/maillog

С его помощью можно найти ошибки и понять, почему не отправляются письма.

Отправка через разные почтовые системы

На нашем сервере Битрикс24 могут быть заведены пользователи, чья почта находится на различных почтовых хостингах, например, mail.ru, Яндекс, GMAIL и так далее. Для отправки почты таким образом, мы должны сделать 2 вещи:

  1. Настроить правило пересылки почты через другие системы.
  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@dmosk.ru

* мы добавили опцию отправки -f bitrix@dmosk.ru — именно этот адрес будет подставляться в заголовки Return-Path и envelope-from.

Чтобы настройки применились, перезапускаем веб-сервер:

systemctl restart httpd

Читайте также

Также вас может заинтересовать:

1. Настройка почтового сервера для массовой рассылки сообщений.

2. Настройка почты GMAIL и Яндекс для подключения по IMAP или POP3.

3. Настройка пересылки почты в Postfix.

4. Установка Битрикс24 на Linux CentOS.

# Linux # Почта # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет