Настройка отправки писем через SendGrid с помощью SMTP

Перед нами стояла задача обойти блокировку массовой рассылки писем с сайта. Из-за использования локального почтового сервера многие письма попадали клиентам в спам. Для этого необходимо было найти и интегрировать сервис-посредник для отправки писем.

Выбор пал на SendGrid (https://sendgrid.com/) - подходящие условия, удобство интеграции.

Исходные данные:
- сайт на 1С-Битрикс
- сервер с подключенным пакетом msmtp для отправки писем
- почта клиента с привязкой домена сайта к Яндекс.Почте

SendGrid предоставляет возможность отправлять письма, как с помощью собственного API, так и через протокол SMTP. Поэтому можно интегрировать как через код сайта, так и на уровне сервера. Нам подошел последний способ интеграции - на уровне сервера. Он более универсальный - не нужно вносить какие-либо правки в код сайта.

Производим интеграцию по шагам.

Шаг 1. Прописать DNS записи для почты.

Для этого на сайте SendGrid’а заходим в раздел Sender Authentication и следуя инструкциям получаем CNAME записи.

Прописать DNS записи для почты SendGrid

Так как наш домен был делегирован на сервера Яндекса, прописывать пришлось именно там.

Настройка DNS SendGrid в Яндекс.Почте

Здесь хотелось бы подчеркнуть, что при добавлении DNS записи для почты не следует в поле “Хост” (HOST) указывать полное значение как говорит нам SendGrid - только значение до домена сайта.

Таким образом проходим верификацию. И полдела сделано.

Верификация домена SendGrid

Шаг 2. Настройка отправки писем с сайта.

После привязки почты нам необходимо настроить отправку всех писем с сайта через новый сервис. В нашем случае проект был размещен на сервере на базе BitrixVM. По умолчанию на сервере используется пакет msmtp, служащий для отправки писем. С помощью его мы и настроим SMTP интеграцию.

На сайте SendGrid’а в Setup Guide выбираем опцию SMTP Relay.

На сайте SendGrid’а в Setup Guide выбираем опцию SMTP Relay

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

Получение ключа SendGrid

Копируем полученные данные и переходим к нашему серверу.

Конфигурационный файл находится по данному пути - /home/bitrix/.msmtprc. В нем мы видим следующее:

account default
logfile /home/bitrix/.msmtp.log #(расположение логов)
host smtp.sendgrid.net #(выданное название сервера)
port 587 #(порт для передачи данных. Именно с этим портом интеграция работает корректно)
from info@email.ru #(адрес используемой нами почты)
keepbcc on
auth on
user apikey #(выданный логин)
password <пароль> #(выданный пароль)
tls on #(обязательное условие для работы с Яндекс сервером)
tls_certcheck off

Шаг 3. Проверка работоспособности.

Почти готово. Осталось убедится, что в настройках нашего сервера указана верная служба для отправки писем. Для этого открываем файл /etc/php.d/bitrixenv.ini и проверяем чтобы в поле sendmail_path было прописано msmtp -t -i.

Если это не так, меняем значение на нужное и перезапускаем apache.

Для моментальной проверки использовалась консольная команда:

echo -e "test message" | /usr/bin/msmtp --debug -t -i name@site.ru.

Переходим на страницу интеграции SendGrid и проходим верификацию.

Завершение настройки SendGrid

Вот и все. Теперь все письма будут автоматически отправляться через новый сервис, таким образом мы избавились от проблемы, когда письма приходят к клиентам данного сайта в папку Спам.

Автор:
Александр
Разработчик Digital Spectr