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/
В итоге сайт будет отправлять письма от имени реально существующего почтового ящика и проблем с заголовком больше возникать не должно.