Event send не работает
Проверить работу почты сайта под управлением Битрикс:
Битрикс посылает почтовые шаблоны функциями CEvent::Send() и CEvent::SendImmediate().
Письмо отправляется, если Битрикс нашел активный почтовый шаблон, подходящий под это событие и соответствующий текущему сайту.
Письма отправлены через CEvent::Send() попадают в таблицу b_event.
Чтоб проверить таблицу существует 2 способа
первый: перейти на страницу
и в поле Фильтр по имени таблицы ввести b_event. перейти по точному совпадению таблицы.
другой: описан ниже
Письма, попавшие в b_event, посылаются на агенте (хиты) или на cron (по расписанию). Отправляются не сразу.
Письма, посылаемые через SendImmediate не попадают в b_event, а отправляются сразу.
Send и SendImmediate — обертки на функцию Битрикса bxmail, которая использует либо стандартную php-функцию mail, либо custom_mail, если она определена.
Административный раздел->Рабочий стол->Настройки->Инструменты->Командная PHP-строка скопировать туда:
Поля «От кого» (mail_from@mail.com), «Кому»(mail_to@mail.com) поменять на свои.
Нажать ВЫПОЛНИТЬ.
Битриксовская отправка письма — обёртка над функцией mail().
Если «Отправка не удалась!» функция mail не работает, свяжитесь с администрацией хостинга.
Далее нужно проверить срабатывает ли штатные события.
На D7:
Проверьте что поля «DEFAULT_EMAIL_FROM», «EMAIL», «EVENT_NAME» заполнены верно.
Если не поддерживается D7:
Административный раздел->Рабочий стол->Настройки->Инструменты->SQL запрос пишем
Обращаем свое внимание на колонки SUCCESS_EXEC и DUPLICATE. Иногда нужно подождать некоторое время (недолго) пока отработает запись в лог. Первый при установленном значении ‘Y’ говорит нам что отправка произошла успешно. Второй что письмо продублировано на скрытую копию ВСС (например администратору о совершенном заказе).
Что же делать если значения ‘N’, а отправка простого mail() выдала ‘Успешно отправлено!’ ?
Параметр SUCCESS_EXEC сообщает
Y — все письма по всем почтовым шаблонам были успешно отправлены
F — все письма по всем почтовым шаблонам не смогли быть отправлены
P — часть писем отправлена успешно, часть писем — безуспешно
0 — почтовые шаблоны не были найдены
N — почтовое событие ещё не обрабатывалось функцией CEvent::CheckEvents
Если там стоит ‘N’
1) Возможно в настройках продукта включена отправка сообщений по крону. зайдите в файл /bitrix/php_interface/dbconn.php и проверьте не определены ли у вас константы BX_CRONTAB и BX_CRONTAB_SUPPORT, если да — убрать их.(ОСТОРОЖНО! Быть готовым вернуть всё в исходное состояние)
2) Если после этого SUCCESS_EXEC также N, то необходимо перейти в папку /bitrix/managed_cache/ и попытаться удалить содержимое обязательно через модуль управления структурой, а не через FTP. Если ошибка — исправить проблему с доступом продукта к папкам. Результатом должно быть удаление файлов и папок из кеша через модуль управления структурой.
3) если после виполения команды CEvent::CheckEvents(); в командной строке несколько писем с N меняют статус отправки на другой нужно добавлять и проверять cron-задачу или переключить отправку писем на хиты.
4) Поставить cron-задачу(проверить есть ли она вобще) или перенести отправку на хиты.
5) Код в init.php, некорректно работающий на cron. Проверьте там редиректы и пустые данные в переменной $_SERVER.
Если там стоит ‘F’(функция mail() по какой-то причине вернула False)
1)Может почтовый сервер не поддерживает формат письма.
Убрать BBC(добиваемся чтоб оно работало, но попробовать отключить можно)
Убрать дублирование email в заголовке
Установить Конвертировать 8-битные заголовки
2)Может быть это проблемы на стороне почтовой утилиты на сервере.
Если почта была настроена, но вдруг перестала отпарвляться, ошибку нужно искать в логах почтовой утилиты. В стандартном виртуальном окружении Битрикса это /home/bitrix/msmtp_default.log
проверьте также права на
/home/bitrix/.msmtprc
возможно прав для пользователя bitrix (если стантартное виртуальное окружение) не достаточно на прочтение. Поменяйте владельца на bitrix:bitrix
3) Если писем отправляется очень много.
В почтовых серверах может стоять ограничение на количество писем в минуту, час или день. Если лимит превышен, письма могут быть не доставлены. Ошибки можно увидеть в логах или узнать у техподдержки почтового сервера. Лечится увеличением пропускного лимита или уменьшением количества отправляемых писем. Например, убрать лишних получателей из копий, отключить лишние почтовые шаблоны.
4) В почтовом шаблоне письма есть заглушка #NAME#, а ключа с таким именем нет в массиве полей в b_event.
e-mail отправителя или получателя имеет неправильный формат;
— заглушека #NAME# не может подставиться;
— какой-то из необходимых заголовков не задан в почтовом шаблоне в административной части сайта;
— в почтовом клиенте неверно настроено соответствие заголовков;
— отправитель письма не соответствует тому, что ожидает почтовый сервер.
— Битрикс заполняет заглушку #BCC# в полях Кому и Копии только в письмах, отправляемые модулем Интернет-магазин (например создание заказа).Если вы добавите #BCC# в Кому или Копию в шаблон регистрации пользователя или в свой кастомный, или любой другой шаблон без приставки SALE — письмо не отправится и будет иметь статус отправки F.
5) Обработчики событий отправки писем сработали неверно.
6) Обратите внимание на функцию custom_mail. Если она определена значит заменяет стандартную mail. Даже если она отработала корректно (отослались письма) статус может быть F или 0. Проверьте тариф используемого SMTP, проверьте логины, пароли а также адрес отправителя. Обычно используют класс PhpMailer. Включите дебаг, посмотрите ошибки.
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
Если стоит NULL
API работает только с записями, у которых значение «N», попробуем исправить сам столбец таблицы.
Административный раздел->Рабочий стол->Настройки->Инструменты->SQL запрос пишем
Если стоит «0»
1) Неправильно настроен шаблон сообщения.
Посмотрите правильность зополнения полей. Мало ли.
2) В почтовом шаблоне снята галочка активности или нет привязки к нужному сайту.
3) Обработчики событий отправки писем сработали неверно.
Если ничего не помогло, просите у хостера логи почтового сервера.
По возможности проверить размер таблицы b_event (через phpmyadmin к примеру).
Если дешевый тариф то посмотреть использование памяти сервером.
Возможно у хостера стоит ограничение на вес письма.
Если письмо отправилось, но вы его не видите не забудьте перепроверить спам фильтр на почте, на которую отправляли.
Источник
Не отправляются письма при отправке формы
Знаю, что тема избитая, но вот какая у меня ситуация.
Есть рабочая форма.
При её отправке результат заполнения я вижу в админке на вкладке «Результаты» — http://my.jetscreenshot.com/13187/20141004-itlz-17kb (т.е. форма отправляется).
К форме привязан почтовый шаблон — http://my.jetscreenshot.com/13187/20141004-q2gp-91kb (галка стоит).
Вот шаблон, он тоже активен — http://my.jetscreenshot.com/13187/20141004-dj85-82kb (замазан мой адрес)
Но письма не приходят.
Более того, при отправке формы не добавляются вообще записи в b_event!
http://my.jetscreenshot.com/13187/20141004-gwjw-49kb
На скрине единственная запись в b_event — это результат выполнения
| Цитата |
|---|
| Mikhail Proskurnin пишет: Почтовый сервер на который отправляются письма может ответить ошибкой, которая будет отражена во входящем tcp пакете с почтового сервера. При этом почтовый клиент типа Sendmail вернет true — письмо отправлено. |
| Цитата |
|---|
| Mikhail Proskurnin пишет: Создание почтового события. Почтовое событие может быть создано только функцией CEvent::Send . |
| Цитата |
|---|
| Mikhail Proskurnin пишет: У вас же CEvent::Send не выполняется и почтовые события не формируются. |
Вы неправильно меня поняли — смотрите стартовый пост:
| Цитата |
|---|
| Beef пишет: http://my.jetscreenshot.com/13187/20141004-gwjw-49kb На скрине единственная запись в b_event — это результат выполнения |
который, как видите, успешно сработал и письмо я получил.
Как раз CEvent::Send то выполняется — записи в b_events добавляются и даже статусы успешные.
Не срабатывает отправка писем именно при сабмите формы, причём даже в b_events ничего не появляется. Как будто галка, подключающая почтовый шаблон, не стоит в настройках формы. но она стоит, я даже скрин сделал. И сам шаблон активен
Делаешь форму, пишешь скрипт для передачи в обработчик данных из формы,
а дальше вот тебе пример с коментами обработчика
Часто письма не приходят из за кодировки, была беда целая что только не пробовал все пишется все круто, а на почте писем нет, выделил первым блоком.
ну а ниже делаем переменные для почтовой формы а потом запускаем почтовое событие.
| Цитата |
|---|
| Николай Ашаев пишет: Делаешь форму, пишешь скрипт для передачи в обработчик данных из формы, а дальше вот тебе пример с коментами обработчика |
Часто письма не приходят из за кодировки, была беда целая что только не пробовал все пишется все круто, а на почте писем нет, выделил первым блоком.
ну а ниже делаем переменные для почтовой формы а потом запускаем почтовое событие.
Источник
Отправка email через CEvent::Send()
Доброго времени суток. Возникла проблема с отправкой email через CEvent::Send:
$emlsend = CEvent::Send($TYPE_EMAIL_EVENT,»s1″, $arMail, $ID_EMAIL_EVENT ).
Событие успешно добавляется в БД в таблицу b_event и возвращается его идентификатор, но в поле SUCCESS_EXEC напротив каждого события стоит NULL. Из прочтенного в нете, понял что проблемы в функции CEvent::CheckEvents(), которая должна вызываться в конце страницы, но по каким то причинам наверное не вызывается. Может кто подскажет в чем может быть дело? Заранее спасибо!
P.S. C помощью обычной функции php mail() все письма успешно отправляются и доходят до адресата.
Проблема после этого актуальна?
| Цитата |
|---|
| Pavel Sementsov пишет: Все отправилось Спасибо огромное. так в чем же было дело. CheckEvent не мог понять NULL? |
Вот код:
$PROP[timetowork] = $timetowork;
$PROP[worker] = $worker;
$PROP[stage] = $stage;
$PROP[address] = $address;
$PROP[mess] = $mess;
$PROP[fname] = $fname;
$PROP[email] = $email;
$PROP[telephone] = $telephone;
$PROP[datecreate] = date(‘d/m/y H:i’);
$el = new CIBlockElement;
$arLoadProductArray = Array(
«ACTIVE» => «Y»,
«IBLOCK_ID» => IBLOCK_EMAILQUERY_ID,
«PROPERTY_VALUES»=> $PROP,
«NAME» => $worktype,
«DETAIL_TEXT» => $details
);
$arMail = array(
«WORKER» => $worker,
«TIMETOWORK» =>$timetowork,
«STAGE» => $stage,
«ADDRESSE» => $address,
«MESS» => $mess,
«FNAME» => $fname,
«EMAIL_TO» => $email,
«PHONE» => $telephone,
«DATE_CREATE» => date(‘d/m/y H:i’),
«WORKTYPE» => $worktype
);
if($EMAIL_ID = $el->Add($arLoadProductArray)) <
$arMail[«EMAIL_ID»] = $EMAIL_ID;
$emlsend = CEvent::Send(‘EMAIL_QUERY_TYPE’, ‘s1’, $arMail, 8 );
$rez = CEvent::CheckEvents();
>
else <
echo ‘ Error to add email query: ‘.$el->LAST_ERROR.’ ‘;
>
У вас ID шаблона на месте string duplicate=»Y», может из-за этого глючит
И CEvent::CheckEvents() стоит убрать (она вызывается в эпилоге и дублирование может дать непредсказуемый результат)
| Цитата |
|---|
| Вот сново не отправляет — в базе все OK (SUCCESS_EXEC напротив каждого события стоит N как положено). |
| Цитата |
|---|
| define(«BX_CRONTAB_SUPPORT», true); |
| Цитата |
|---|
| Михаил Митрофанов пишет: Закоментируйте строку: |
| Цитата |
|---|
| define(«BX_CRONTAB_SUPPORT», true); |
| Цитата |
|---|
| alt er table b_event modify SUCCESS_EXEC char(1) not null default ‘N’; |
Всем доброго времени суток! Возникла похожая проблема – с формы на сайте не приходят письма.
Могу ошибаться, но судя по всему, проблема в этой строке: CEvent::SendImmediate(«V1RT_FORMS»,SITE_ID,$arFields);
Код, вставляющий форму на сайт:
| ?require_once($_SERVER[«DOCUMENT_ROOT»].SITE_TEMPLATE_PATH.»/v1rt-forms/vf-feedback_custom.php»);?> |
Файл-обработчик vf-feedback_custom.php:
| $name = htmlspecialchars ( $_POST [ «vf-feedback__name» ]); $tel = htmlspecialchars ( $_POST [ «vf-feedback__tel» ]); $email = htmlspecialchars ( $_POST [ «vf-feedback__email» ]); $vozrast = htmlspecialchars ( $_POST [ «vf-feedback__vozrast» ]); $napravlenie = htmlspecialchars ( $_POST [ «vf-feedback__napravlenie» ]); if (! strlen ( $name ) || ! strlen ( $tel )) < die ( «ERROR 001» ); > require_once ( $_SERVER [ ‘DOCUMENT_ROOT’ ] . «/bitrix/modules/main/include/prolog_before.php» ); $formData = «Имя: $name » ; $formData .= «Телефон: $tel » ; $formData .= «E-mail: $email » ; $formData .= «Возраст ребенка: $vozrast » ; $formData .= «Направление занятий: $napravlenie » ; $formData .= «Страница-источник: » . $_SERVER [ ‘HTTP_REFERER’ ]; $arFields = [ «EMAIL_TO» => » quizi@bk.ru » , «FORM_DATA» => $formData ]; CEvent :: SendImmediate ( «V1RT_FORMS» ,SITE_ID, $arFields ); die ( «OK» ); |
Код самой формы:
| div class = «vf-feedback» > h2 > Запишитесь на Пробное занятие h2 > form method = «post» action = «» class = «vf-feedback__custom» > div class = «row» > div class = «col-lg-6» > label for = «vf-feedback__name» class = «vf-feedback__label» > Ваше имя: span class = «vf-req» > * span > label > input type = «text» name = «vf-feedback__name» id = «vf-feedback__name» value = «» class = «vf-feedback__input» required > div > div class = «col-lg-6» > label for = «vf-feedback__vozrast» class = «vf-feedback__label» > Возраст ребенка: label > select name = «vf-feedback__vozrast» > $dropdown = array ( «Выберите возраст» , «1» , «2» , «3» , «4» , «5» , «6» , «7» , «8» , «9» , «10» , «11» , «12» , «13» , «14» , «15» ); if ( CModule :: IncludeModule ( «iblock» )) |
Папку со спамом проверял – ничего.
Единственный раз, когда письмо пришло (при этом попало в спам) – когда делал запрос через командную панель в админке:
Помогите найти решение! В Битриксе новичок. Возможно даже, проблема в другом месте.
Источник