В Drupal 7 не приходят сообщения через контактную форму

Модерация материалов на этом сайте

В Drupal 7 не приходят сообщения через контактную форму. Интернет, IT

Возникла у меня на этом сайте ошибка - письма, отправленные через контактную форму Drupal 7 (модуль ядра Contact) не приходят ко мне на почту. Причем, не все письма, а с отдельных сервисов, например, mail.ru, Gmail.com. 

Для начала обратилась в службу поддержки хостинга. Ответ:

Вероятно, в Вашей форме адрес посетителя подставляется в поле From, то есть в виде отправителя. По политике mail.ru письма с обратным адресом @mail.ru или аналогичные можно отправлять только с их серверов, и никаких других.
Вам следует задать поле From (отправителя) на принадлежащем Вам домене, тогда все письма будут Вам доходить.

Стала гуглить и выяснилось, что проблема достаточно распространенная. Даже удивительно, что за 6 лет существования проблемы в модуль Contact Drupal 7 так и не внесли изменения. Конечно, программисты такой баг решают легко (но рецепт я не нашла), но мне как новичку пришлось попотеть. Вот здесь нашла обсуждение данной проблемы, но предложенный хук для Contact не сработал. А потом и вовсе посетила меня мысль, что добавлять такое количества кода из-за небольшой проблемки неразумно.

Читайте также:
Как сделать адаптивный дизайн на сайте?
 
 

В общем, решила проблему тем, что в contact.pages.inc в исходящих с моего сайта письмах изменила $from на почтовый адрес на моем домене - contact@na-poluostrove.ru. Единственный нюанс - это модуль ядра, который может удалится при обновлении. Значит, надо или пометочку для себя сделать или задать на папке с модулем такие права, чтобы файлы в ней нельзя было перезаписать.

Заодно вспомнила, что у меня уже была проблема с ящиками mail.ru, gmail.com в самом начале изучения системы. Тогда пользователи при регистрации не получали письма со ссылкой для подтверждения. Причина была похожая: адрес для отправления писем, который задается в общих настройках сайта, я по незнанию поставила не от моего домена, а почтового сервиса. 

Итак, заменить надо строки 152 и 156:

// Send the e-mail to the recipients using the site default language.
  drupal_mail('contact', 'page_mail', $to, language_default(), $values, $from);

  // If the user requests it, send a copy using the current language.
  if ($values['copy']) {
    drupal_mail('contact', 'page_copy', $from, $language, $values, $from);
  }

Изменила на:

// Send the e-mail to the recipients using the site default language.
  drupal_mail('contact', 'page_mail', $to, language_default(), $values, 'contact@na-poluostrove.ru');

  // If the user requests it, send a copy using the current language.
  if ($values['copy']) {
    drupal_mail('contact', 'page_copy', $from, $language, $values, 'contact@na-poluostrove.ru');
  }

И в строке 287 тоже: 

// Send the e-mail in the requested user language.
  drupal_mail('contact', 'user_mail', $to, user_preferred_language($values['recipient']), $values, 'contact@na-poluostrove.ru');

Возможно, кто-то сможет предложить более удобное решение проблемы в комментариях. Буду благодарна за помощь.

Комментарии: