Битрикс и отправка писем

Иногда по непонятным причинам не происходит отправка писем из битрикса.
А бывает, что происходит (вроде бы), но они не доходят до адресата. Единственный случай, когда не стоит этому удивляться, это когда ваш битрикс установлен на локальном сервере (у вас на пк).
Что касаемо остальных причин, то вот они:

1. Настройки хостинга либо не позволяют отправлять письма, либо стоит слишком маленький лимит на кол-во сообщений в час (а то и сутки).
Для проверки создаем в корне сайта файл testmail.php с таким кодом:

<?php
$to = 'ВАШ@ПОЧТА.ru';
$subject = 'Привет!';
$message = 'Йа письмецо';
$headers = 'From: test@'. $_SERVER['HTTP_HOST'] . "\r\n" .
    'Reply-To: test@'. $_SERVER['HTTP_HOST'] . "\r\n" .
    'X-Mailer: PHP/' . phpversion();
if( mail($to,$subject,$message,$headers) ){
	echo 'Успешно отправлено!';
}else{
	echo 'отправка не удалась!';
}
?>

Если в течении пяти минут письмо не пришло, стоит спросить у вашего хостера: «почему?».

2. Вторая распространенная причина, это конфиг битрикса. Дело в том, что в нем есть возможность отправки писем не сразу, при выполнении запроса, а с отсрочкой. Письмо помещается в очередь на отправку и если у вас не настроен cron на периодическое выполнение файла:
/usr/bin/php -f /путь_от_корня/САЙТ.ru/bitrix/modules/main/tools/cron_events.php
то ваши письма так и останутся в очереди. К сожалению, в битриксе нет возможности посмотреть этот список. В сети можно найти советы по выполнению прямых запросов в базу, но уверяю, они позказывают не все сообщения. Поэтому я написал для себя (и делюсь с вами) скрипт, который позволяет посмотреть сообщения по типу почтового шаблона. Его нужно скачать, загрузить на сайт в директорию bitrix и открыть в браузере по ссылке http://вашсайт.ru/bitrix/mailstat.php.
bitmail
Чтобы отключить отправку по cron’у, необходимо в файле /bitrix/php_interface/dbconn.php найти параметры define('BX_CRONTAB', true); define('BX_CRONTAB_SUPPORT', true); и установить их в FALSE. Если таких записей нет, то можно их добавить, лишним не будет.

3. Blacklist. Столкнулся с этим в первый раз, но думаю как вариант, рассматривать его стоит. Важно, чтобы все отправляемые с сайта письма, содержали реально существующий адрес для ответа. Тогда в случае каких-либо проблем, все возвращаемые письма можно будет увидеть. Только благодаря этому, я недавно смог понять в чем причина не доходящих писем на одном сайте. Если бы не реальный адрес для ответа, я бы так и бился в догадках.

Удачи с битриксом, если вам довелось с ним столкнуться…

This entry was posted in PHP and tagged , , , , . Bookmark the permalink.

Всего 19 комментариев

  1. Алексей

    удобный скрипт, можно конечно немного подкоректировать, но главное в нем уже заложено. спасибо. вот только немного не понимаю почему он не весь список отображает. я знаю что есть событие 2037 и выше, а отображаются только до 2036(хотя прошло уже 3 дня с момента отправки)
    может можете подсказать где еще искать причину — отработало событие CEvent::Send в шаблоне указано 2 ящика — на 1 ушло, на второй нет — ящики рабочии, от перемены мест результат такой же причем через mail уходит все на 2 ящика

    • Не совсем понял, когда меняете ящик, то письмо приходит на тот же что и прошлый раз или на другой адрес, на который в прошлом варианте не пришло? Письма отправляются от существующего адреса? Не смотрели там нет ли писем которые могли вернуться?

  2. Александр

    Спасибо! Мне помог совет 2. И скрипт, а затем исправление dbconn.php. Удивляюсь, но без заморочек Битрикс никак не может. Потерял целый день, пока не наткнулся на ваш совет.
    И еще вопрос — как «прикрутить» к сайту комментарии, похожие на ваши. Версия Битрикс совсем простая. Посоветуйте.

    • Дело в том, что с битриксом я уже давно не работал, года полтора как минимум, так что про компоненты не в курсе. К тому же у меня сайт на wordpress, тут это все из коробки (комменты).
      но если версия битрикса совсем простая, старт или что там сейчас, то я бы сделал комменты из инфоблоков и написал свой скрипт. Думаю стоит поискать на форуме битрикса, у них там пользователи больше толковых советов дают чем тех поддержка. 😉

  3. Вова

    Привет всем. А как быть, если почтовый сервер у нас в офисе??? С сайта, который на Битрикс-бизнесе, заказ на все почты яндекс, mail, gmail, отправляются, а вот на корпоративные адреса не отправляется. А как быть с этой ситуацией.???

    • А как этот сервер у вас настроен? (Может это только внутренняя почта?) А вообще скорее всего вам нужно проверить ваш спам фильтр, если фильтрация происходит на основе внешних черных списков, то скорее всего в этом вся проблема. А у публичных почтовых сервисов фильтрация гораздо умнее, они не фильтруют просто по IP как например почтовый сервер типичного хостера, у которого распологается ваш домен.

  4. Алексей

    Добрый день, ребят, подскажите, в cronе после этих манипуляций удалять задание на скрипт cron_event.php?

    • Не уловил, после каких манипуляций? Видимо имеется в виду после отключения отправки по крону в параметрах сайта? Тогда да, думаю стоит и в кроне задачу потушить.

  5. Анон

    Здравствуйте. Возникла проблема. При попытке отправить письмо со скрипта в файле mail.php в корневой директории письма уходят на почтовый ящик, но там их нет. Казалось бы, проблема в настройках хостинга. Но при регистрации на сайте, письма мгновенно летят в на почтовый ящик пользователя, который регистрируется. Что это значит? В чем проблема? Спасибо.

    • Извините, давно не работал с битриксом. Насколько понимаю при регистрации, письмо отправляется самой cms, значит в вашем скрипте в функции отправки не хватает каких-либо данных. Например, вы могли не указать адрес отправителя, такие письма могут не доходить до адресата из-за спам фильтров.

  6. в течениЕ пяти минут

    проще так

    select * from b_event where event_name like ‘%form%’ order by date_insert desc

    Найдите событие заполнения формы, смотрите в поле SUCCESS_EXEC:

    стоит Y — письмо из продукта ушло, дальнейшую его судьбу попросите отследить администратора хостинга

    стоит N — зайдите в файл /bitrix/php_interface/dbconn.php и проверьте не определены ли у Вас константы

    BX_CRONTAB и BX_CRONTAB_SUPPORT, если да — убрать их определение вообще из этого файла. Если после этого SUCCESS_EXEC также N, то необходимо перейти в папку /bitrix/managed_cache/ и попытаться удалить содержимое (обязательно через модуль управления структурой, а не через FTP), если получите ошибку — значит необходимо исправить проблему с доступом продукта к папкам, чтобы Вы могли удалить файлы и папки из кеша.

    Стоит F — функция mail() по какой-то причине вернула False при отправке. Наиболее типичные проблемы:

    1. Не настроена функция mail() на хостинге. Решается с хостером.

    2. Почтовый сервер не поддерживает формат письма. Пробовать изменять настройки отправки, убирать поле ВСС, убирать галочку «Дублировать email адрес в заголовке», ставить «Конвертировать 8-битные заголовки». Не помогает — запросить логи у администратора почтового сервера, чтобы посмотреть, в чем конкретно ошибка при отправке.

    Стоит 0 (ноль) — значит, что-то неверно в настройках из пп.1-2 — проверьте еще раз.

  7. Денис

    Огромное спасибо

    решилось при помощи пункта 3

  8. Игорь

    marketplace.1c-bitrix.ua/solutions/ghj2k2.mailinfo/

    давным давно появилось решение бесплатное на маркетплейсе

  9. Спасибо за скрипт сообщения и правда там повисли, но к сожалению у меня нет этого конфигурационного файла, есть только .settings.php Будем разбираться..

  10. Хочу заметить, что если в SendAttache четвертым параметром передать не путь, а массив путей, то к письму приложится несколько аттачей. В обработчике лишь пример как можно использовать данную функцию.

  11. Дело в том, что добавление в таблицу произойдет, но система помаркирует ее как провал при отправке и письма не отправится, а через несколько дней запись и вовсе удалится автоматически.

Добавить комментарий

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

Можно использовать язык разметки Markdown

Protected by WP Anti Spam