Замовлення в магазині є, а листів про них немає. Клієнт оформив покупку й чекає підтвердження, менеджер дізнається про нове замовлення тільки коли сам зайде в адмінку, а форма зворотного зв'язку мовчить уже місяць, і ніхто цього не помітив. Так виглядає магазин, у якому пошту залишили «як було після встановлення».
Проблема в тому, що після встановлення OpenCart відправляє листи через PHP-функцію mail(). Іноді це навіть працює. Але саме «іноді» і є діагнозом: частина листів доходить, частина осідає у спамі, частина зникає без сліду, і зрозуміти закономірність неможливо. Нижче розберемо, як перевести магазин на SMTP і чому це не примха, а базова гігієна.
Де живуть налаштування
Адмінка → Система → Налаштування, кнопка редагування магазину, вкладка «Пошта». В OpenCart 3.x головне поле називається «Поштовий рушій» (Mail Engine), у 2.x — «Поштовий протокол». Суть однакова: два варіанти, Mail і SMTP.
Поруч на тій самій вкладці ще одна річ, про яку часто забувають: секція сповіщень. Там задається додаткова адреса (або кілька, через кому), куди летять копії службових листів, і галочки — про що саме повідомляти: нові замовлення, реєстрації, відгуки. Якщо менеджер не отримує листи про замовлення, у половині випадків причина банальна: адресу сюди просто не вписали.
Ще одна адреса, яка бере участь у процесі, живе на вкладці «Магазин» — це основний E-Mail магазину. Саме він підставляється у поле «Від кого». Запам'ятайте цей факт, він ще вистрілить у розділі про спам.
Чому режим Mail — це лотерея
Функція mail() віддає лист локальному поштовому агенту сервера (sendmail, exim), і далі той сам домовляється зі світом. Без авторизації, без гарантій, часто з IP-адреси, з якої шлють пошту ще сотні сайтів на тому ж сервері. Gmail і Outlook дивляться на такі листи з підозрою за замовчуванням: відправника ніхто не автентифікував, репутація IP невідома або зіпсована сусідами.
На частині хостингів mail() взагалі вимкнена або обрізана лімітами, і магазин при цьому не показує жодної помилки: OpenCart вважає, що лист відправлено, бо функція повернула true. Лист при цьому нікуди не пішов. Це найпідступніший сценарій, бо в журналі помилок порожньо, а клієнти мовчки не отримують підтверджень.
Єдиний сценарій, де Mail ще має сенс: тимчасовий тестовий магазин на локальному сервері. Для бойового магазину відповідь одна — SMTP. Якщо все ж залишаєтеся на Mail, впишіть у поле «Параметри пошти» рядок виду [email protected]: це підставить коректну адресу відправника на рівні sendmail і трохи зменшить шанси потрапити у спам. Але це милиця, а не рішення.
Налаштовуємо SMTP: доменна пошта
Найкращий варіант для магазину — скринька на власному домені, наприклад [email protected]. Вона або вже входить у ваш хостинг-тариф, або створюється в панелі за хвилину. Параметри для OpenCart виглядають так:
Поштовий рушій: SMTP
SMTP хост: ssl://mail.vashdomen.ua
SMTP логін: shop@vashdomen.ua
SMTP пароль: пароль від скриньки
SMTP порт: 465
SMTP таймаут: 5
Тут собака зарита у префіксі ssl://. OpenCart не вміє сам здогадатися, що з'єднання шифроване: він відкриває сокет рівно на той рядок, який ви вписали в поле хоста.
Класична помилка виглядає так:
Неправильно: хост mail.vashdomen.ua, порт 465 → з'єднання висне, у журналі таймаут.
Правильно: хост ssl://mail.vashdomen.ua, порт 465 → лист іде.
Порт 587 зі STARTTLS у стандартному OpenCart працює нестабільно: підтримка залежить від конкретної збірки 3.0.3.x, а у 2.x її немає зовсім. Не витрачайте час на експерименти, зв'язка ssl:// + 465 працює скрізь однаково. Порт 25 навіть не пробуйте: більшість хостингів і провайдерів його блокують для вихідних з'єднань, це стара міра проти спам-ботів.
Логін завжди пишеться повністю, з доменом. shop замість [email protected] — друга за популярністю причина помилки «Password not accepted from server», одразу після банальної одруківки в паролі.
Налаштовуємо SMTP: Gmail
Варіант для старту, коли доменної пошти ще немає. Але з 2022 року Google не приймає звичайний пароль акаунта від сторонніх програм, і OpenCart для нього — саме така програма. Потрібен пароль застосунку: в акаунті Google увімкніть двоетапну перевірку, потім у розділі безпеки створіть «Пароль застосунку». Отримаєте 16 символів — саме їх і вписуйте в поле пароля:
SMTP хост: ssl://smtp.gmail.com
SMTP логін: vashapochta@gmail.com
SMTP пароль: пароль застосунку (16 символів)
SMTP порт: 465
Тепер чесно про обмеження, бо їх два і обидва суттєві. Перше: ліміт близько 500 листів на добу для звичайного акаунта. Магазину на старті вистачить, магазину з розсилками — ні. Друге неприємніше: Gmail примусово підставляє адресу акаунта в поле «Від кого», що б не стояло в налаштуваннях магазину. Клієнт отримує підтвердження замовлення від [email protected], і довіри до магазину це не додає. Тому Gmail — тимчасове рішення на перші тижні, не більше.
Листи йдуть, але в спам
Найчастіша скарга після переходу на SMTP: технічно все працює, а листи однаково осідають у «Спамі». Причина майже завжди у розбіжності між тим, хто відправляє, і тим, від чийого імені лист підписаний.
Перевірте три речі по черзі.
Перше: E-Mail магазину на вкладці «Магазин» має збігатися зі скринькою, через яку йде SMTP. Відправляєте через [email protected], а у «Від кого» стоїть [email protected] — для поштових фільтрів це виглядає як підробка відправника, і лист карається одразу.
Друге: SPF-запис у DNS домену. Це TXT-запис, який каже світу, яким серверам дозволено слати пошту від імені вашого домену. Для пошти на хостингу він зазвичай уже прописаний або додається однією кнопкою в панелі; типовий вигляд — v=spf1 +a +mx ~all. Перевірити наявність можна будь-яким онлайн-інструментом на кшталт mxtoolbox: вводите домен і одразу бачите, чи є запис і що в ньому.
Третє: DKIM, криптографічний підпис листів. У більшості панелей керування вмикається одним перемикачем у налаштуваннях поштового домену. Після SPF і DKIM має сенс додати ще й DMARC-запис, хоча б у м'якому режимі p=none: Gmail з 2024 року дедалі жорсткіший до доменів без нього.
Звучить як багато роботи, але на практиці це хвилин двадцять один раз. І саме ці двадцять хвилин відрізняють магазин, чиї листи читають, від магазину, чиї листи ніхто ніколи не бачить.
Як діагностувати, коли не працює
OpenCart пише поштові помилки у журнал: Система → Обслуговування → Журнал помилок, фізично це файл system/storage/logs/error.log. Найшвидший спосіб згенерувати тестовий лист без оформлення замовлення — форма зворотного зв'язку на сторінці «Контакти» або відновлення пароля клієнта.
Типові записи в журналі і що вони означають:
Error: Password not accepted from server! — невірний пароль, логін без домену, або для Gmail використано звичайний пароль замість пароля застосунку.
Error: MAIL not accepted from server! — сервер відмовився приймати адресу відправника. Найчастіше E-Mail магазину не збігається з акаунтом SMTP.
Таймаут або порожнє зависання при відправці — з'єднання не встановилося. Перевірте префікс ssl:// у хості й те, що порт саме 465. Якщо і це не допомагає, порт може різати файрвол хостингу: одне звернення в підтримку зазвичай закриває питання.
Окремий підступний випадок: у журналі чисто, магазин рапортує про успіх, а листів немає. Це майже завжди режим Mail, про який ішлося вище. Функція відзвітувала «відправлено», sendmail лист поховав. Переходьте на SMTP і проблема зникне.
Кому вбудованого SMTP не вистачить
Заради чесності: штатний механізм OpenCart шле листи синхронно, прямо під час оформлення замовлення. Якщо SMTP-сервер відповідає повільно, покупець ці секунди дивиться на спінер після натискання «Підтвердити замовлення». Для магазину з десятками замовлень на день це непомітно. Для магазину, який шле тисячі транзакційних листів, або хоче красиву аналітику доставки й відкриттів, розумніше дивитися в бік спеціалізованих сервісів (SendPulse, Mailgun і подібних) через відповідний модуль. Але це вже інший масштаб задачі; для більшості українських магазинів доменна скринька через SMTP закриває питання повністю.
Чек-лист
- Створіть скриньку на власному домені виду
[email protected]. - В адмінці: Система → Налаштування → Пошта, рушій SMTP.
- Хост із префіксом:
ssl://mail.vashdomen.ua, порт 465, логін повністю з доменом. - Звірте E-Mail магазину на вкладці «Магазин» з акаунтом SMTP — вони мають збігатися.
- Впишіть адреси менеджерів у додаткові сповіщення й поставте галочку на замовленнях.
- Перевірте в DNS записи SPF і DKIM, додайте DMARC хоча б із
p=none. - Надішліть тестовий лист через форму контактів на Gmail і на Outlook, перевірте папку «Спам» в обох.
- Загляньте в Журнал помилок: після тесту там має бути порожньо.