Не отправляются мейлы через форму Contact

Главные вкладки

Аватар пользователя bizbank_ru bizbank_ru 12 декабря 2014 в 18:22

Тема с ошибками при отправке сообщений через форму обратной связи поднималась на форуме большое количество раз, но решения для своего случая я так и не нашел.
1. У друпала 6 версии все работает, письмо уходит, но все равно вначале высвечивается сообщение "Невозможно отправить e-mail. Свяжитесь с администратором сайта, если проблема повторяется", а ниже "Ваше сообщение отправлено". И сообщение-таки приходит.
2. У друпала 7 версии появляется такое же сочетание сообщений (см. вложение), но писем нет. Устанавливал MTP Authentication Support, связывался с провайдером (Агава) - ничего не помогает.
И в первом, и втором случае использую для отправки ящики mail.ru (перепробовал различные комбинации, в том числе и ящик на gmail.com).

Просьба:

1. Подсказать, как удалить сообщение "Невозможно отправить e-mail. Свяжитесь с администратором сайта, если проблема повторяется" для 6-ки, когда сообщения приходят,
2. Помочь найти причину неработы модуля contact для 7-ки. Установлена последняя версия модуля.

Спасибо за внимание.

ВложениеРазмер
Иконка изображения contact.jpg87.92 КБ

Комментарии

Аватар пользователя EvgenySorokin EvgenySorokin 13 декабря 2014 в 14:47

Вам надо не удалять уведомление об ошибке отправке, а решать проблему, из-за которой письмо не отправляется.
Обычно все это по логам довольно просто определяется, там пишется в чем причина. Саппорт просите, или сами смотрите.

Причин может быть много.
Вот с такой сталкивался - было подобное сообщение при попытке отправить письмо (на хостинге nic.ru). Решилось созданием ящика, который указывался как отправитель письма. Если отправляете с майла и тд - используйте smtp модуль.

А то получается, что сайт site.ru отправляет письмо, где указано, что отправитель site@mail.ru.

Аватар пользователя bizbank_ru bizbank_ru 13 декабря 2014 в 23:18

Вы невнимательно прочитали мое сообщение: я прошу помочь убрать сообщение на сайтах друпала 6 версии, где письма отправляются, но сообщение об ошибке все равно присутствует (см. аттач).
SMTP Authentication Support на 7-ке устанавливал - контрольное письмо с него не отправляется.

"Garin33" wrote:
А то получается, что сайт site.ru отправляет письмо, где указано, что отправитель site@mail.ru.

Почему-то такая схема на 6-ке работает без проблем (только вот сообщение об ошибке все равно приходит, вводя в заблуждение отправителя).

Аватар пользователя bizbank_ru bizbank_ru 19 декабря 2014 в 17:28

Помогли разобраться хостеры из Агавы:
оказывается суть проблемы заключается в том, особенность отправки почты с виртуального хостинга такова, что письма можно отправлять не чаще, чем 1 раз в 0,3 сек. Если отправлять письма скриптом, то они отправляются сразу пачкой и не проходят в этот интервал. Форма отправляет два письма одновременно, первое пользователю, второе администратору, поэтому добавить задержку необходимо, иначе второе письмо доставлено не будет. Легче всего этого избежать, добавив в скрипты sleep(1); после mail(), и тогда письма будут отправляться нормально. То есть, если скрипт для отправки писем имеет следующий вид:

<?php
mail("mail", "тема", "Сообщение1");
mail("mail", "тема", "Сообщение2");
?>

второе сообщение не будет отправлено, т.к. установлена задержка между отправками писем для того, чтобы снизить нагрузку на сервер при массовой отправке писем т.е. чтобы хостинг не использовался как спам-ресурс. Поэтому, чтобы второе письмо тоже доходило, необходимо установить задержку между отправкой писем, например так:

<?php
mail("mail", "тема", "Сообщение1");
sleep(1);
mail("mail", "тема", "Сообщение2");
?>

Таким образом, правку необходимо сделать в modules/contact/contact.pages.inc.

Ниже приведен фрагмент кода, где вставлены две строчки sleep(1);

// Send the e-mail to the recipients using the site default language.
  drupal_mail('contact', 'page_mail', $to, language_default(), $values, $from);
  sleep(1);
  // If the user requests it, send a copy using the current language.
  if ($values['copy']) {
    drupal_mail('contact', 'page_copy', $from, $language, $values, $from);
  }
  sleep(1);

Таким образом, вопрос окончательно закрыт.
Всем спасибо Smile