4.8.10. Некоректний заголовок «From»
Увага!
Проблема може виникати при надсиланні листів з веб-сервера без авторизації та по SMTP з авторизацією.Загальна інформація
Причина проблеми полягає в тому, що лист надсилається з однієї поштової скриньки, але при формуванні вмісту листа в заголовок «From» підставляється адреса поштової скриньки іншого поштового домену, який ніяк не пов’язаний з тим, звідки фактично здійснюється надсилання. Наприклад, лист надсилається з поштової скриньки mail@example.com, а в заголовок «From» підставляється адреса вигляду johndoe@gmail.com, яка не має жодного стосунку до mail@example.com. Такі листи не будуть доставлені.
Адреса, яка потрапляє в заголовок, може бути вказана в коді самого сайту, його базі даних або ж скрипт може отримувати її через форму на сайті. Універсальної відповіді на це питання немає, все залежить від коду самого сайту, використовуваної CMS, плагінів тощо.
Крім того, проблема може виникати під час використання редиректу в сторонньому поштовому клієнті. У цьому випадку справжня адреса відправника та адреса у заголовку «From» будуть відрізнятися, і листи не будуть доставлені.
Коли заголовок вважається коректним
(*.default-host.net)"|maillog maillog-->|В отримувачах є чужі поштові домени|from maillog-->|В отримувачах тільки власні поштові домени|sent from--->|Свій поштовий домен|sent from-->|"*.default-host.net (без авторизації)"|sent from-.->|Чужий поштовий домен|invalid-from invalid-from-.->unsent envelope-sender-.->|Чужий поштовий домен|invalid-sender invalid-sender-.->unsent mail-->|З сайту|php-mail-log php-mail-log-->envelope-sender envelope-sender-...->|Відправник встановлений двома різними способами|sendmail-exited sendmail-exited-.->php-error-log
При надсиланні з веб-сервера без авторизації заголовок вважається коректним за таких умов:
- Поштовий домен адреси із заголовка додано у вашому обліковому записі.
- Хостинг-акаунт відправника та поштовий домен адреси із заголовка належать одному обліковому запису.
- Якщо обліковому запису належить лише одна з послуг, а друга делегована, то заголовок не вважається коректним.
- Якщо заданий відправник (вибрана вихідна пошта або у функції PHP mail використовується параметр
-f), поштовий домен адреси із заголовка має збігатися з доменом відправника. - Якщо відправник не заданий, у заголовку має бути вказана адреса вашого поштового домену.
- Коли не задані відправник і заголовок, у заголовку буде використовуватися адреса пошти за замовчуванням вигляду
*.default-host.net.- Наш сервіс дозволяє надсилати такі листи, але їхня доставка не є надійною, оскільки отримувачі можуть їх відхиляти.
При надсиланні по SMTP з авторизацією заголовок вважається коректним за таких умов:
- Поштовий домен адреси із заголовка збігається з доменом поштової скриньки, з якої виконується надсилання.
Заголовок не перевіряється, якщо поштові домени всіх отримувачів листа належать тому ж обліковому запису, що й поштовий домен відправника (не делеговані).
Де задається заголовок
задана в скрипті?" } site@{ shape: diamond, label: "Надсилання
з сайту?" } outgoing@{ shape: diamond, label: "Вибрана
вихідна
пошта?" } cron@{ shape: diamond, label: "Вибрана
поштова скринька
за замовчуванням?" } subgraph "From" script_mailbox@{ shape: rounded, label: "📝 Адреса
зі скрипта" } outgoing_mailbox@{ shape: rounded, label: "⚙️ Адреса
з налаштувань сайту" } cron_mailbox@{ shape: rounded, label: "⚙️ Адреса
з налаштувань
хостинг-акаунта" } cron_account@{ shape: rounded, label: "🌐 *.default-host.net" } end smtp------>script_mailbox mail-->script script-->|✅|script_mailbox script-->|❌|site site-->|✅|outgoing outgoing-->|✅|outgoing_mailbox outgoing-->|❌|cron cron-->|✅|cron_mailbox cron-->|❌|cron_account site-->|❌|cron
При надсиланні з веб-сервера без авторизації:
- Заголовок задається скриптами сайту (цей спосіб має вищий пріоритет, ніж налаштування в панелі керування хостингу).
- Якщо надсилання здійснюється через сайт і заголовок не задається у скриптах, використовується вихідна пошта з налаштувань сайту.
- В інших випадках використовується адреса вихідної пошти за замовчуванням з налаштувань хостинг-акаунта.
При надсиланні по SMTP з авторизацією:
- Заголовок задається скриптом надсилання або поштовим клієнтом, що використовується.
Наслідки
Перед надсиланням кожного листа система перевіряє коректність його заголовка «From», і якщо заголовок некоректний, відбувається наступне:
- Надсилання листа блокується.
- Запис про спробу надсилання потрапляє у лог невідправлених листів.
- Спроба надсилання потрапляє до статистики за поточний день.
- На початку наступного дня на пошту надсилається лист з зібраною статистикою за попередній день.
Блокуються лише конкретні листи з некоректними заголовками. При цьому надсилання листів з коректним заголовком «From» ніяк не порушується — вони надсилаються як зазвичай.
Сповіщення
Надсилаються на пошту на початку наступного дня та містять статистику листів з некоректним заголовком «From» за попередній день.
Керувати сповіщеннями можна в налаштуваннях сповіщень за допомогою опції «Обмеження роботи служб».
Діагностика
Список логів, які можуть допомогти у виявленні джерела надсилання листів з некоректними заголовками.
При надсиланні з веб-сервера без авторизації:
- Усі спроби надсилання видно у логу пошти з сайта.
- Спроби надсилання через сайти видно у логах пошти PHP (індивідуально для кожного сайту).
- Усі спроби надсилання листів з некоректними заголовками видно у логу невідправлених листів для хостинг-акаунта.
- Помилки виклику функції PHP mail при надсиланні через сайти видно у логах помилок PHP (індивідуально для кожного сайту).
При надсиланні по SMTP з авторизацією:
- Усі підключення при спробах надсилання видно у логах підключення до поштових скриньок (індивідуально для кожної поштової скриньки).
- Усі спроби надсилання листів з некоректними заголовками видно у логах невідправлених листів для поштових доменів (індивідуально для кожного поштового домену).
Якщо надсилання виконуються з сайту, можна співвіднести час надсилань з часом запитів у логах доступу сайту. Наприклад, якщо під час спроби надсилання листа з некоректним заголовком був POST-запит до скриптів сайту, то, найімовірніше, ці скрипти мають відношення до такого надсилання (часто це різні контактні форми, форми замовлення тощо).
Рішення
Якщо проблема пов’язана з сайтом, зазвичай рішення зводиться до наступного:
- Знайти на сайті скрипт або плагін, який відповідає за надсилання листів.
- Визначити, які дані він вказує у полі «From» і звідки їх бере.
- Зробити так, щоб у скрипті вказувався коректний відправник.
Тобто, якщо скрипт надсилає листа від імені поштової скриньки mail@example.com, то й у заголовку «From» має бути вказана та сама поштова скринька.
Можна діяти залежно від того, які адреси ви бачите в сповіщеннях про надсилання листів з некоректним заголовком «From»:
- У заголовку «From» вказано один з ваших доменів:
- Перевірте, чи додано у вашому обліковому записі відповідний поштовий домен.
- Переконайтеся, що поштовий домен належить тому самому обліковому запису, що й хостинг-акаунт, з якого виконується надсилання (делегування не враховується).
- У заголовку «From» вказано вашу поштову скриньку в сторонньому поштовому сервісі:
- Перевірте скрипти надсилання на сайті або налаштування використовуваної CMS, знайдіть цю адресу та замініть її на адресу поштової скриньки одного з ваших поштових доменів.
- Якщо ви хочете й надалі надсилати листи від імені поштової скриньки стороннього поштового сервісу, налаштуйте надсилання по SMTP.
- У заголовку «From» вказано різні адреси, які вам невідомі:
- Перевірте обробники форм на сайті або налаштування використовуваної CMS, знайдіть місце, де в заголовок вставляється некоректна адреса, і зробіть так, щоб замість неї вставлялася адреса поштової скриньки одного з ваших поштових доменів.
Якщо проблема пов’язана з редиректом у сторонньому поштовому клієнті, для її вирішення потрібно виконати наступне:
- Вимкнути редирект в сторонньому поштовому клієнті.
- Організувати доставку листів у потрібну поштову скриньку одним з наступних способів:
- Налаштувати редирект у панелі керування.
- Налаштувати редирект за допомогою фільтрів WebMail.Online або WebMail classic.
Коментарі
Попытки отправки вы можете увидеть в разделе «Неотправленные письма» — https://adm.tools/hosting/account/0/mail/unsent/, а POST-запросы к форме на вашем сайте — в логах доступа к сайту — https://adm.tools/hosting/account/0/virtual/0/edit/serverlog/
Якщо з якихось причин вони у вас не працюють, можете просто перейти в панелі керування за наступними шляхами:
- Хостинг → Невідправлені листи.
- Хостинг → Мої сайти → ваш сайт → Логи доступу до сайту.
А как сделать так чтобы все же можно было отправлять с другим полем From ?
если в пределах одного домена надо пересылать не регулярно письма как выходить из положения ?
Пример - один наш бухгалтер хочет переслать другому нашему бухгалтеру квитанцию с новой почты. В поле From адрес новой почты.
Уверен, что Thunderbird и The Bat! имеют настройку, которая меняет поведение при Forwarding.
Если хостинг провайдер даст возможность указывать любой From, то вам можно прислать фишинг или вирус, отправив в рамках того же хостинг провайдера письмо на ваш email. И при этом оно пройдет все фильтры у этого провайдера. Вы хоть понимаете, что требованием дать возможность отправлять так почту стреляете себе в ногу и при этом стреляете с пушки?
В вашем случае для решения проблемы должно быть достаточно выбрать созданный на хостинге почтовый ящик в поле «Исходящая почта» в настройках сайта, как предложено в комментарии выше.
Благодарю за разъяснение и помощь.
Если в процессе возникнут трудности, обратитесь в за консультацией в онлайн-чат.
Все работало нормально.
Вы что-то поменяли в настройках хостинга, и теперь заказы с сайта не приходят.
По сути вы своими действиями сломали работу интернет магазина.
Если вы что то поменяли, что из за этого перестал корректно работать интернет магазины ваших клиентов, то будь ласка, исправляйте, решайте проблемы ваших клиентов сами.
Пишите подробную инструкцию для каждого клиента, подключайтесь к исправлению проблемы.
Я уже неделю ищу решения проблемы, созданой вами, а результата ноль.
Почта с интернет магазина как не приходила, так и не приходит.
Чтобы исправить проблему, достаточно корректно настроить отправку почты с сайтов. Если сайт условно называется example.com, то почта должна уходить с адреса с таким же почтовым доменом, а не выдавать себя за gmail.com, outlook.com и т. д.
Если в вашем случае проблема относится к сайту на OpenCart, попробуйте настроить почту по этой инструкции — https://www.ukraine.com.ua/wiki/hosting/cms/opencart/mail/
В случае возникновения трудностей или дополнительных вопросов, обратитесь за консультацией в онлайн-чат.
catalog/controller/information/contact.php
замінив з
$mail->setFrom($this->request->post['email']);
на
$mail->setFrom($this->config->get('config_email'));
поки працює
только через СМТП теперь? у меня не получилось его настроить корректно раньше и нормально работало через встроенную функцию ПХПББ...
Це відповідь ШІ на ситуацію коли провайдер став розсилати повідомлення про ⚠️ Надсилання листів з некоректним заголовком «From».
"Що насправді відбувається?
Ти кажеш, що ні ти, ні модулі сайту нічого не відправляєте. Але лог показує зворотне: відпрацьовує стандартна функція PHP mail() прямо з движка OpenCart: /system/library/mail/mail.php на рядку 77.
Це спам-боти, які шлють повідомлення через твою форму зворотного зв'язку або реєстрації.
Працює це так:
Бот заходить на твій сайт (наприклад, на сторінку «Контакти» або форму відгуків).
Заповнює поля: вписує умовне ім'я «Margie Christiansen», пошту christiansen.margie@gmail.com і якийсь спам-текст.
Натискає «Відправити».
OpenCart за логікою своєї роботи намагається переслати це повідомлення тобі на info@vidnova.shop.
У чому конфлікт із хостингом?
За замовчуванням OpenCart влаштований так: коли хтось пише через форму зв'язку, движок формує лист, де в поле From (Від кого) підставляє пошту клієнта (того самого бота — christiansen.margie@gmail.com), а в полі To (Кому) вказує твою адресу info@'ваш.сайтʼ
Сучасні хостинги (і поштові сервери) таку практику жорстко присікають. Твій сервер не має права відправляти листи від імені gmail.com чи outlook.com — це грубе порушення політик безпеки (SPF, DKIM). Хостинг бачить, що скрипт намагається відправити лист нібито від імені Margie, і блокує його, щоб сервер не потрапив у спам-листи.
Висновок: Твій сайт не зламали (принаймні, цей лог про це не говорить). Це просто спам через стандартну форму, посилений некоректною логікою формування заголовків у самому OpenCart.
Як це правильно виправити?
Рішення складається з двох обов'язкових кроків: технічного (щоб не сварився хостинг) та захисного (щоб припинити спам).
### Крок 1. Виправляємо заголовки From в OpenCart (Технічне рішення)
Тобі потрібно зробити так, щоб сайт відправляв усі листи тільки від імені твоєї офіційної скриньки (info@'ваш.сайтʼ), а пошту клієнта/бота зашивав у заголовок Reply-To (Відповісти сторічці). Тоді хостинг пропустить лист, а коли ти натиснеш «Відповісти» у поштовому клієнті, відповідь піде автору повідомлення.
Оскільки ти використовуєш OpenCart, найкраще переключити відправку з функції Mail на SMTP (якщо ще не зроблено) і підправити логіку:
1) Перехід на SMTP (якщо можливо):
В адмінці OpenCart: Система -> Налаштування -> Редагувати магазин -> вкладка "Пошта".
Зміни "Поштовий протокол" з Mail на SMTP.
Заповни параметри твоєї робочої пошти хостингу (SMTP-сервер, логін, пароль, порт). Сайти на SMTP працюють стабільніше і листи рідше падають у спам.
2) Модифікація коду (виправлення From для Mail/SMTP):
Якщо проблема лишається, потрібно змінити логіку в контролері контактів (catalog/controller/information/contact.php).
Знайди там код, де формується відправка листа адміністратору (зазвичай там є рядок $mail->setFrom($this->request->post['email']);).
Його потрібно змінити так:
PHP
// Замість пошти клієнта ставимо пошту магазину:
$mail->setFrom($this->config->get('config_email'));
// А пошту клієнта записуємо в Reply-To, щоб ти міг йому відповісти:
$mail->setReplyTo($this->request->post['email']);
*Примітка: Якщо оновлюєш код, роби це через OCMOD/відповідний модифікатор, щоб при оновленні сайту правки не злетіли.*
### Крок 2. Закриваємо форми від ботів (Захист від спаму)
Навіть якщо ти виправиш заголовки, боти продовжать забивати твою пошту сміттям. Їх треба відсікти.
* **Встанови Google reCAPTCHA v3 або Cloudflare Turnstile:** Стандартна капча OpenCart (якщо вона там стара) ботами клацається на раз-два. reCAPTCHA v3 або Turnstile від Cloudflare працюють непомітно для користувача, але блокують 99% автоматичного спаму.
* **Перевір усі форми:** Спамити можуть не лише через «Контакти», а й через форму «Купити в 1 клік», «Зворотній дзвінок» або реєстрацію (якщо боти реєструють фейкових користувачів, і сайт шле тобі сповіщення про нового клієнта). Закрий капчею кожну з них.
Виконавши ці два кроки, ти і хостинг заспокоїш, і скриньку від спаму очистиш."
Я для початку обмежився переходом з Mail на SMTP і далі буду дивитись чи робити модифікацію коду та чи ставити reCAPTCHA.
Всім успіхів.
Если у вас письма отправляются с адреса вида wordpress@ваш_сайт, значит на вашем сайте используется WordPress и для него используется почта по умолчанию. В этом случае вам нужно добавить почтовый домен с адресом вашего сайта — https://www.ukraine.com.ua/wiki/mail/domains/order/ — и создать для него почтовый ящик с любым названием — https://www.ukraine.com.ua/wiki/mail/boxes/create/
После этого можно настроить для сайта отправку почты по SMTP — https://www.ukraine.com.ua/wiki/hosting/cms/wordpress/plugins/mail/
В итоге сайт будет отправлять письма от имени реально существующего почтового ящика и проблем с заголовком больше возникать не должно.