Настройка отправителя и сервера отправки
Независимо от настроенного нами отправителя в веб-интерфейсе, битрикс будет отправлять письма с заголовком envelope-from, значением которого будет общий отправитель, настроенный в системе. Также нам нужно выбрать сервер, через который будет отправляться почта.
Для этого в стартовом меню битрикс (когда заходим под пользователем root) выбираем настройку Configure pool sites:
Available actions:
1. Manage servers in the pool
2. Configure localhost settings
3. Configure MySQL service for the pool
4. Configure Memcached service for the pool
5. Configure pool monitoring
6. Configure pool sites
7. Configure Sphinx service for the pool
8. Manage pool web servers
9. Configure Push/RTC service for the pool
10. Background pool tasks
0. Exit.
Enter your choice: 6
После выбираем пункт Change a site’s email settings:
Available actions:
1. Create a site
2. Delete a site
3. Change a site’s cron settings
4. Change a site’s email settings
5. Change a site’s https settings
6. Change a site’s backup settings
7. Configure NTLM auth for sites
8. Configure optional services (xmppd|smtpd) for a site
9. Configure nginx to use composite cache
10. Configure additional site’s options
0. Previous screen or exit
Enter your choice: 4
Выбираем сайт для настройки (если он один, то default):
Available actions:
Manage email settings
0. Previous screen or exit
Enter site name (default) or 0 to exit: default
Отвечаем на вопросы мастера. В нашем примере мы рассмотрим настройку отправки с локального сервера, поэтому задаем адрес 127.0.0.1. В поле From написать адрес общего отправителя. Также мы отказываемся от использования ЕДЫ и аутентификации. В итоге, мы получим что-то на подобие:
Found 1 sites:
———————————————————————————
SiteName | dbName | Email | Server | TLS | From
———————————————————————————
default | sitemanager | Y | 127.0.0.1:25 | off | test@oleg.ru
———————————————————————————
Если нам необходимо отправлять письма с публичных почтовых систем (Яндекс, mail.ru, GMAIL и так далее), необходимо указать их серверы smtp. Если в нашей системе есть пользователи разных почтовых систем, необходимо настроить отправку почты через локальный сервер, который будет с помощью транспортных правил пересылать сообщения через соответствующие системы. Пример настройки postfix для отправки через Яндекс.
Наши настройки сохраняются в файле:
vi /etc/msmtprc
Открываем его, чтобы проверить или изменить данные.
Настройка сервера
Если на первом шаге мы выбрали отправку писем через локальный сервер, настроим его для корректного формирования и отправки писем. Будем использовать локальный MTA на базе Postfix.
Наш сервер должен иметь правильное имя — его можно задать командой:
hostnamectl set-hostname mail.oleg.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, то менять значение не нужно.
Задаем в качестве значения для myorigin наш домен, с которого будем отправлять письма:
myorigin = dmosk.ru
* где 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@oleg.ru
* данная политика укажет, что почту, которая не прошла проверку, необходимо поместить в карантин.
PTR
Это обратная запись для внешнего IP-адеса, на котором работает почтовый сервер. Она должна совпадать с именем, которым представляется почтовый сервер (как правило, это имя сервера или его hostname).
Прописывается у провайдера, который предоставляет Интернет (или поставщик МЗЫ)ю
Пример записи:
93.93.93.95.in-addr.arpa name = mail.dmosk.ru
* указываем, что имя узла для IP-адреса 95.93.93.93 должно быть mail.oleg.ru.
MX
Для домена должна быть определена MX-запись, которая указывает на адрес почтового сервера. В противном случае, к домену не будет доверия.
Пример записи:
MX preference = 10, mail exchanger = mail1.oleg.ru
MX preference = 20, mail exchanger = mail2.oleg.ru
* в данном примере указано 2 почтовых сервера для домена oleg.ru. Более приоритетный mail1.oleg.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: test@{$_SERVER[‘SERVER_NAME’]}\r\n» .
«X-Mailer: PHP/» . phpversion();
if(mail(«master@dmosk.ru», «Письмо для проверки», «Тестовое сообщение», $headers) ) {
echo «Сообщение отправлено!»;
} else {
echo «Ошибка! Проверьте настройки почтового сервера и его лог (/var/log/maillog)»;
}
* где master@oleg.ru — адрес почтового ящика, на который будет отправлено тестовое сообщение.
Нажимаем кнопку Выполнить и подтверждаем во всплывающем окне наши намерения запустить на исполнение скрипт. Мы должны получить ответ: «Сообщение отправлено!». В противном случае, изучаем логи.
Подключение ящика
Для подключения к ящику заходим в битрикс 24 под пользователем. Слева переходим в Почта:
Переходим к работе с почтой в битрикс 24
Среди поставщиков услуг выбираем подходящий вариант или IMAP:
Переходим к настройкам 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 …
Перезапускаем веб-сервер:
systemctl restart httpd
Можно отправлять почту.