При отправке почты через сторонние smtp сереры нужно подстраиваться под их ограничения. Например для Яндекса это ограничение 3000-5000 писем в сутки.
Здесь я приведу пример необходимых настроек для отправки почты со своего сервера без ограничений. Письма будут шифрованные и будут проходить все проверки и попадать в папку входящие, вместо спама.
Для приема писем будем считать что используется сервис от Яндекса - Почта для домена или сейчас уже Яндекс 360
Установку производим на том же сервере где расположен сайт на Битркисе.
Домен для пример - domain.ru
Почтовые адреса - info@domen.ru, order@domen.ru и тд
Адрес тестовой почты - name@gmail.com
Установка и настройка Postfix
Первым делом устанавливаем postfix, который будет отправлять исходящую почту.
yum install mailx
yum install postfix
systemctl enable postfix
systemctl start postfix
Далее редактируем настройки в файле /etc/postfix/main.cf
cd /etc/postfix/
cp main.cf main.cf.ori
Добавляем в конец файла записи чтобы переопределить исходные
inet_interfaces = loopback-only
mydestination = localhost.$mydomain, localhost, $myhostname
# если нужно складывать письма в локлаьныя ящик для o**@domain.ru
#mydestination = domain.ru localhost.$mydomain, localhost, $myhostname
Включаем использование postfix по умолчанию
alternatives --config mta
В результате у нас будет список доступных вариантов, нужно будет ввести цифру под которой находится запись со строкой postfix, в примере это - 2. Нажимаем Enter
Отправляем тестовое письмо
echo "Test mail" | mail -v -s "Testing mail" -S smtp="localhost:25" -S from="info@domain.ru" -S return-path="info@domain.ru" name@gmail.com
Скорее всего оно не дойдет, будет отклонено почтовым сервисом, так как нужно выполнить еще ряд манипуляций.
Посмотреть что произошло можно в логе
tail -n 40 /var/log/maillog
И увидим там примерно следующее
Поэтому перейдем к настройке DKIM и SPF
Настройка SPF
Для настройки SPF записи, необходимо чтобы в DNS записях была TXT запись примрено следующая для хоста - @.
v=spf1 a ip4:11.180.180.120 include:_spf.yandex.net ~all
IP адрес - 11.180.180.120 приведен для примера, этот адрес должен быть адресом сервера на котором производим настройку. Его указывать не обязательно, так как есть в строке символ - "a" который говорит о том что нужно взять ip адрес из записи типа A.
include:_spf.yandex.net - это нужно чтобы работала почта от яндекса, чтоб из почтового ящика также можно было отправлять письма по старому.
Так это выглядит на странице управления DNS домена в яндексе
Настройка DKIM
На этом шаге также будем вносить запись в DNS, но прежде нужно подготовить данные.
Устанавливаем, включаем, запускаем
yum install opendkim opendkim-tools
Далее генерируем ключ и переименовываем полученные файлы для удобства
cd /etc/opendkim/keys/
opendkim-genkey -d domain.ru -s server
mv server.private server.domain.ru.private
mv server.txt server.domain.ru.txt
chown opendkim:opendkim server.*
Содержимое файла server.domain.ru.txt нужно указать в DNS домена
Так это выглядит на странице управления DNS домена в яндексе
Проверить подпись можно будет через некоторое время например здесь - https://dkimcore.org/c/keycheck
указав селектор из примера - server и домен - domain.ru ( в вашем случае домен будет другой)
Теперь заполняем соответствующие таблицы
cd /etc/opendkim/
В конец файла KeyTable добавляем запись
server._domainkey.domain.ru domain.ru:server:/etc/opendkim/keys/server.domain.ru.private
В файл SigningTable добавляем адреса с которых будет отправлять, укажем через * чтобы правила работали для любых адресов исходящих писем с конкретного домена.
# WILDCARD EXAMPLE
*@domain.ru server._domainkey.domain.ru
# NON-WILDCARD EXAMPLE
domain.ru server._domainkey.domain.ru
* server._domainkey.domain.ru
В файл TrustedHosts добавляем домен в конец файла
*.domain.ru
domain.ru
Теперь вносим изменения в конфиг opendkim - /etc/opendkim.conf и приводим значения параметров к следующему виду
Mode s
Selector server
KeyFile /etc/opendkim/keys/server.domain.ru.private
KeyTable /etc/opendkim/KeyTable
SigningTable refile:/etc/opendkim/SigningTable
InternalHosts refile:/etc/opendkim/TrustedHosts
Socket inet:8891@localhost
Применяем сделанные настройки и включаем
systemctl restart opendkim
systemctl enable opendkim
Добавляем в конец основного файла настроек Postfix - /etc/postfix/main.cf соответствующие настройки
# dkim
milter_protocol = 2
milter_default_action = accept
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Применяем настройки
systemctl restart postfix
TLS. Шифрование исходящих писем Postfix
Чтобы исходящие письма шифровались и в почтовиках не отображались лишние надписи что письма не зашифрованы и не безопасны, сделаем несколько действий.
Для работы шифрования возьмем действующие сертификаты на домен, которые были автоматически получены с помощью Let's Encrypt через меню Bitrix Env
Для этого укажем пути до файлов приватного ключа и цепочки сертификатов. Пути не меняются при обновлении сертификатов и лежат по стандартному пути - /home/bitrix/dehydrated/certs/domain.ru/
Добавляем в конец основного файла настроек Postfix - /etc/postfix/main.cf соответствующие настройки
smtpd_tls_key_file = /home/bitrix/dehydrated/certs/domain.ru/privkey.pem
smtpd_tls_cert_file = /home/bitrix/dehydrated/certs/domain.ru/fullchain.pem
smtp_use_tls = yes
Применяем настройки
systemctl restart postfix
PTR запись
Также необходимо сделать в панели управления хостингом или виртуальным серверов некоторые настройки, чтобы IP адрес сервера указывал на домен domain.ru
Как это сделать смотрите на страницах помощи вашего хостинг провайдера.
Настройка отправки почты для Битрикс
Настройки для отправки email писем в битриксе хранятся в файле /home/bitrix/.msmtprc
Его можно изменить через меню Bitrix Env либо вручную приведя к следующему виду. В поле From укажите адрес отправителя по умолчанию, например: info@domain.ru
Тестовая отправка email
После добавления записей в DNS нужно подождать несколько часов, лучше сутки, чтобы сделанные изменения стали учитываться.
После этого можно сделать тестовую отправку письма например из терминала
echo "Test mail" | mail -v -s "Testing mail" -S smtp="localhost:25" -S from="info@domain.ru" -S return-path="info@domain.ru" name@gmail.com
Также можно сделать тестовую отправку из административного раздела битркиса, выполнив PHP код на странице /bitrix/admin/php_command_line.php?lang=ru
var_dump(mail('name@gmail.com', 'Тема', 'Сообщение'));
Проверка DKIM
Проверить устанавливается ли подпись можно не выходя из консоли, для этого выполним тестовую отправку письма
echo "Test text" | mail -s "Test title" name@gmail.com
И посмотрим в локальном почтовом ящике содержимое письма, елси операция выполнялась по польвзаотелем root, то сомтрим так
tail /var/mail/root -n 50
и ищем текст DKIM-Signature, если он есть, значит письма подписываются