Где отключить подмену адреса почты в Contact Form 7?

Ссылка скопирована
2 ответов

WordPress + Contact Form 7. Больше никаких почтовых плагинов. Проблема в том, что в поле От указано имя info@site.ru, а в логах видно, что отправка идет от имени admin@site.ru. При этом в админской почте указан вообще другой адрес.

Вопрос: кто из них (ВП ил КФ7) поменяет адрес отправки? Как это исправить?

Дополнительные вопросы

Я проверил на чистом ВП - какой адрес указан в конструкторе формы "От кого", с того и отправляет.

  • Refguser, как проверили?
  • Megos, установил ВП и проверил.
  • Refguser, я смотрю адреса писем в mainlog exim. Вы там же смотрите?
  • Megos, в заголовках письма, естественно (зачем для этого лезть в логи МТА). В служебных заголовках, если что.
  • Refguser, ну потому что проблема в том, что если смотреть заголовки в ящике, то адрес правильный (из поля От). Но только реальный адрес отправки у всех 60 сайтов на серваке начинается с admin@. И это видно только в логах.
  • Megos, я не знаю что ты видишь в логах (подозреваю мыло домена виртуалхоста и не понимаешь что это значит), но в письмах всё правильно. Причем тут логи... и зачем.

    Но если тебя интересуют логи, то об этом надо было писать в вопросе. Подробно - что как делаешь, какой шаблон формы, какие настройки отправки и пр.

  • Refguser, в посте написано про логи. В письмах не все правильно, потому что правило блокировки оправки писем с подменой адреса (https://debian.pro/1541) - блокает все письма, потому что все письма идут не от того адреса, который указывается в СF7. Может быть это виртуалхост, я не знаю. Поэтому и задал вопрос тут. У тебя в mainlog адрес отправки совпадает с адресом из плагина?

    У меня оно выглядит так:
    2024-04-04 17:54:57 1rsOUT-000QgR-I4 <= admin@site.ru U=remont P=local S=1392 id=MedEjew@site.ru
    2024-04-04 17:54:57 1rsOUT-000QgR-I4 ** md****@mail.ru R=check_outgoing_from_header: You can not send mail from here with From: WordPress wordpress@site.ru as sender: admin@site.ru

    И это от всех ВП сайтов, которых несколько десятков. То есть это не 1 сломанный сайт, они все себя так ведут.

    Отсюда вопрос: что именно меняет адрес wordpress@site.ru на admin@site.ru? Сам ВП? Плагин CF7? Сервак?

  • Megos, сервер настраивай. ВП не причём.
  • Refguser, так на вопрос, что в логах и не ответил.
  • Megos, этой инфы недостаточно. НО! Я тебе сказал что ВП тут не причем. И посему вопрос "Где отключить подмену адреса почты в Contact Form 7?" - бедовый по сути. Тебе нужно разбираться с сервером в первую очередь. А как это делать - это совершено другой вопрос. (хотя бы догадался проверить почту без ВП...)
  • Я проверял почту без ВП, когда настраивал блокировку. Это описано в той инструкции, которую я показал. С ней нет проблем. Проблема только с ВП. Я проверял логи еще 2 ВПС у других хостеров, там в логах тоже самое. Поэтому я и задал вопрос так, как задал. И уже несколько раз спросил про твои логи, ведь у тебя все работает, но вместо ответа флуд какой-то.
  • Ответы на вопрос 0

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Сергей Миронов Ответ

    Contact Form 7 сам по себе обычно отправляет письмо с тем адресом, который указан в поле «От кого». Если в настройках формы стоит info@site.ru, а в логах фактическим отправителем становится admin@site.ru, подмена чаще происходит ниже: в WordPress-фильтрах, SMTP/почтовом сервере, настройках хостинга или политике отправки домена.

    Проверять нужно в таком порядке:

    1. Откройте вкладку «Почта» в Contact Form 7 и убедитесь, что поле От кого заполнено адресом на домене сайта.
    2. Проверьте файл functions.php, mu-plugins и кастомные плагины на фильтры wp_mail_from и wp_mail_from_name.
    3. Посмотрите, не задан ли фиксированный отправитель на уровне SMTP-плагина. Вы пишете, что плагинов нет, но это всё равно стоит проверить в списке must-use и системных настройках хостинга.
    4. Посмотрите логи Exim: там обычно видно, на каком этапе меняется envelope sender.
    5. Проверьте SPF/DKIM/DMARC. Некоторые серверы принудительно заменяют отправителя, если домен не разрешает отправку.

    Типичный код подмены в WordPress выглядит так:

    add_filter('wp_mail_from', function () {
        return 'admin@site.ru';
    });
     
    add_filter('wp_mail_from_name', function () {
        return 'Site Admin';
    });

    add_filter('wp_mail_from', function () { return 'admin@site.ru'; }); add_filter('wp_mail_from_name', function () { return 'Site Admin'; });

    Если такой код есть, его нужно удалить или заменить на нужный адрес. Но правильнее для формы использовать схему: From — технический адрес сайта, например noreply@site.ru, а адрес посетителя передавать в Reply-To. Тогда почта меньше конфликтует с SPF/DMARC и лучше доставляется.

    Пример для CF7:

    From: Сайт &lt;noreply@site.ru&gt;
    Reply-To: [your-email]

    From: Сайт &lt;noreply@site.ru&gt; Reply-To: [your-email]

    Если после этого в логах всё равно виден admin@site.ru, значит подмена происходит не в Contact Form 7, а на сервере или в глобальном коде WordPress.

    Другие ответы (1) Ответить на вопрос
    Есть ответ!

    Подмена адреса почты в Contact Form 7 обычно происходит не в самом CF7, а на уровне SMTP-плагина, почтового сервера, политики домена или фильтров WordPress. Многие хостинги не дают отправлять письма с произвольного From, если домен не совпадает с доменом сайта или не настроены SPF/DKIM.

    Что проверить:

    • поле From в настройках формы Contact Form 7;
    • настройки SMTP-плагина: фиксированный отправитель, force from email/name;
    • SPF, DKIM и DMARC для домена отправителя;
    • логи Exim/Postfix или логи SMTP-плагина;
    • фильтры в теме или mu-plugin: wp_mail_from, wp_mail_from_name.

    Если нужно найти принудительную подмену в коде:

    add_filter('wp_mail_from', function ($email) {
        return 'noreply@example.ru';
    });

    add_filter('wp_mail_from', function ($email) { return 'noreply@example.ru'; });

    Правильная схема: в From ставить адрес на домене сайта, например noreply@site.ru, а email пользователя передавать в Reply-To. Так письма реже попадают в спам и не конфликтуют с политиками почтовых сервисов.

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно