OpenCart — популярная CMS для онлайн-магазинов, но «из коробки» она имеет один из худших конфигов для транзакционных писем. Подтверждения заказов, сброс пароля, письма-уведомления — всё проходит через локальный бинарный sendmail хостинг-провайдера через функцию PHP mail(). Это означает, что письма уходят с return-path на IP хостинга, без подписи DKIM и без правильного SPF. Результат — почти гарантированное попадание в спам, особенно в Gmail и Outlook.
Если письма OpenCart постоянно не доходят или приземляются в Спам, фикс почти всегда один: переключить Mail Engine с Mail на SMTP, привязать к проверенному отправителю (Google Workspace, Zoho, SendGrid, Postmark, Brevo) и убедиться, что домен From имеет SPF, DKIM и DMARC, настроенные на этот провайдер.
Почему дефолтные параметры OpenCart ломают доставляемость
Когда вы устанавливаете OpenCart и оставляете Mail Engine в значении по умолчанию Mail, каждое исходящее письмо передаётся функции PHP mail(). PHP в свою очередь пропускает сообщение локальному MTA на хостинге (обычно Postfix или Exim). Оттуда письмо доставляется напрямую с IP общего хостинга к получателю.
В этом подходе четыре фундаментальные проблемы:
- SPF проверка не проходит. SPF запись вашего домена почти наверняка не содержит IP общего хостинга. Gmail, Outlook и Yahoo проверяют SPF на envelope sender и сразу же помечают письмо как неаутентифицированное.
- Нет подписи DKIM. MTA хостинга подписывает письма своим доменом, а не вашим. Поэтому либо DKIM отсутствует, либо не проходит проверку выравнивания.
- DMARC выравнивание не срабатывает. При неработающем SPF и отсутствующем DKIM любая DMARC политика на домене From отклоняет или помещает в карантин письмо.
- IP хостинги заранее занесены в чёрные списки. Бюджетные хосты запускают тысячи сайтов на одном IP-пуле. Одного спамера соседа достаточно, чтобы затянуть письма вашего магазина в Спам.
Фикс 1: Переключение OpenCart на SMTP
Самое важное изменение из всех. В админ-панели OpenCart:
- Перейдите в
System → Settingsи нажмите Edit на вашем магазине. - Откройте вкладку Mail.
- Измените Mail Engine с
MailнаSMTP. - Заполните SMTP Hostname, Username, Password, Port и SMTP Timeout для выбранного провайдера.
- Установите Mail Protocol Prefix в
tls://, если ваш провайдер требует TLS на порту 587, илиssl://на порту 465. Оставьте пусто для простого 25 (не рекомендуется).
Типичные значения SMTP для популярных провайдеров:
Google Workspace (SMTP relay):
Host: smtp-relay.gmail.com
Port: 587 (tls://)
Username: ваш-пользователь@вашдомен.ru
Password: App password (не ваш пароль Google)
SendGrid:
Host: smtp.sendgrid.net
Port: 587 (tls://)
Username: apikey
Password: <ваш SendGrid API ключ>
Postmark:
Host: smtp.postmarkapp.com
Port: 587 (tls://)
Username: <server API token>
Password: <server API token>
Brevo (ex-Sendinblue):
Host: smtp-relay.brevo.com
Port: 587 (tls://)
Username: ваш-логин-brevo@brevo.com
Password: <ваш SMTP ключ>После сохранения запустите сброс пароля или разместите тестовый заказ самому себе. Проверьте заголовки письма. Если Return-Path показывает домен провайдера и DKIM показывает d=ваш-домен.ru, переключение сработало.
Фикс 2: Опубликуйте SPF, DKIM и DMARC для вашего домена
Сам по себе SMTP не решает проблему доставляемости. Домен From всё ещё должен авторизовать SMTP провайдера. Каждый провайдер даёт вам набор DNS записей — обычно один SPF include, две-три CNAME для DKIM и базовую DMARC политику.
- SPF: добавьте клаузулу
include:провайдера. Пример для SendGrid:v=spf1 include:sendgrid.net -all. - DKIM: опубликуйте CNAME записи, которые даёт провайдер. Они указывают на управляемые провайдером ключи. Не копируйте ключи из туториалов — используйте те, что сгенерированы для вашего аккаунта.
- DMARC: начните с
v=DMARC1; p=none; rua=mailto:вы@ваш-домен.ru, смотрите агрегирующие отчёты неделю, потом переходите наp=quarantine.
Некоторые общие хосты блокируют исходящий порт 587. В этом случае у вас два варианта: свяжитесь с хостом и попросите его открыть, или используйте провайдера, который принимает отправку через API (Postmark, SendGrid, Mailgun) через лёгкое расширение OpenCart вместо встроенного SMTP.
Фикс 3: Установите расширение для работы с почтой
Встроенный SMTP клиент OpenCart функционален, но ограничен. Он не ставит в очередь неудачные письма, не повторяет попытки и не логирует отправку. Для магазинов с большим объёмом писем отдельное расширение стоит своих денег.
- SMTP by Various — самый распространённый бесплатный вариант на маркетплейсе OpenCart. Добавляет повторные попытки и более хороший логинг ошибок поверх стандартного движка.
- Mailgun / SendGrid API модули — полностью обходят SMTP и отправляют через API провайдера. Быстрее на медленных хостах и лучше работают с большими вложениями.
- AMP for Email расширения — если вы хотите интерактивные подтверждения заказов в Gmail, эти добавляют AMP-отрендеренные шаблоны поверх стандартного конвейера почты.
Seed-тест перед запуском
После того как SMTP и DNS установлены, не полагайтесь на авось. Тестируйте. Самый простой путь:
- Создайте тестовый заказ, используя фиктивный товар с ценой ноль или одна копейка.
- Подставьте в поле email дюжину seed-ящиков (Gmail, Outlook, Yahoo, iCloud, ProtonMail, GMX и т.д.) — один за один или в батче.
- Проверьте, где каждое письмо оказалось: Входящие, Promotions, Спам или вообще не пришло. Инструмент вроде этого бесплатного инбокс-чекера запускает всю сетку за один тест.
- Посмотрите заголовки копии в Gmail. Ищите
dkim=pass,spf=passиdmarc=passвсе по вашему домену.
Если какой-то провайдер показывает размещение в Спаме, исправьте именно этот провайдер перед запуском. Gmail обычно первым прощает; Outlook и Mail.ru медлительнее восстанавливают доверие.
Постоянно: подогрев репутации отправителя
Магазин, который раньше отправлял с плохого общего хостинга, имеет нулевую или негативную репутацию у крупных почтовых провайдеров. Переход на чистый SMTP провайдер необходим, но не мгновенен. Ожидайте две-три недели подогрева, в течение которых вы должны:
- Начните с низкого объёма: только реальные заказы, без рассылок.
- Держите содержание письма неизменным неделю за неделей, чтобы сигналы репутации стабилизировались.
- Мониторьте агрегирующие отчёты DMARC — они первые предупреждают об отклонениях выравнивания.
- Повторяйте seed-тест еженедельно в течение первого месяца, потом ежемесячно.
Встроенная интеграция OpenCart находится в приватной бета. Она подключается к событию подтверждения заказа OpenCart, seed-тестирует копию через 20+ почтовых провайдеров и оповещает вас в админ-панели, если размещение падает.