Cevent 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 к примеру).
Если дешевый тариф то посмотреть использование памяти сервером.
Возможно у хостера стоит ограничение на вес письма.
Если письмо отправилось, но вы его не видите не забудьте перепроверить спам фильтр на почте, на которую отправляли.
Источник
CEvent::Send, не могу найти ошибку
Не могу понять где ошибка, сообщения не приходят, но в таблице b_event в поле SUCCESS_EXEC пишет Y(то есть сообщения посланы как я понял). Я новичок в битриксе, тем кто откликнется заранее спасибо
Ниже код
function SendPost($el_id, $type) < //Функция отправкли уведомления. Справочник типов: "S" - Статус, "M" - добавлено сообщение, "D" - Создана заявка
$el_id = intval($el_id);
$arSelect = $this->getProperty();
$arFilter = Array(«ID»=>$el_id);
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
if($ob = $res->GetNextElement())
<
$arFields = $ob->GetFields();
switch ($type) <
case «S»: $S_NAME = $this->getUserByID($arFields[«PROPERTY_W_USER_ID_VALUE»] ;
//$E_MAIL = $this->getUserMail($arFields[«PROPERTY_W_USER_ID_VALUE»] .»,».$this->getUserMail($arFields[«PROPERTY_W_OP_ID_VALUE»] ;
$E_MAIL = $this->getUserMail($arFields[«PROPERTY_W_USER_ID_VALUE»] .»,».$this->getUserMail($arFields[«PROPERTY_W_ART_ID_VALUE»] .»,».$this->getOperator();
$D_ID = $el_id;
$D_NAME = $arFields[«NAME»];
$D_STATUS = $this->getSectionById($arFields[«PROPERTY_W_STATUS_VALUE»] ;
$D_DATE =$arFields[«TIMESTAMP_X»];
$O_NAME =$this->getUserByID($arFields[«PROPERTY_W_OP_ID_VALUE»] ;
$arEventFields = array(
«S_NAME» => $S_NAME,
«EMAIL» => $E_MAIL,
«D_ID» => $D_ID,
«D_NAME» => $D_NAME,
«D_STATUS» => $D_STATUS,
«D_DATE» => $D_DATE,
«O_NAME» => $O_NAME,
);
$ID_POST_TEMPLATE = intval(self::T_ST);
break;
case «D»: $S_NAME = $this->getUserByID($arFields[«PROPERTY_W_USER_ID_VALUE»] ;
//$E_MAIL = $this->getOperator();// мыла всех операторов.
$E_MAIL = $this->getUserMail($arFields[«PROPERTY_W_USER_ID_VALUE»] .»,».$this->getUserMail($arFields[«PROPERTY_W_ART_ID_VALUE»] .»,».$this->getOperator();
$D_ID = $el_id;
$D_NAME = $arFields[«NAME»];
$D_STATUS = $this->getSectionById($arFields[«PROPERTY_W_STATUS_VALUE»] ;
$D_DATE =$arFields[«DATE_CREATE»];
$arEventFields = array(
«S_NAME» => $S_NAME,
«EMAIL» => $E_MAIL,
«D_ID» => $D_ID,
«D_NAME» => $D_NAME,
«D_STATUS» => $D_STATUS,
«D_DATE» => $D_DATE,
);
$ID_POST_TEMPLATE = intval(self::T_D);
break;
case «M»:
//$E_MAIL = $this->getUserMail($arFields[«PROPERTY_W_USER_ID_VALUE»] .»,».$this->getUserMail($arFields[«PROPERTY_W_OP_ID_VALUE»] ;
$E_MAIL = $this->getUserMail($arFields[«PROPERTY_W_USER_ID_VALUE»] .»,».$this->getUserMail($arFields[«PROPERTY_W_ART_ID_VALUE»] .»,».$this->getOperator();
$D_ID = $el_id;
$D_NAME = $arFields[«NAME»];
$arEventFields = array(
«EMAIL» => $E_MAIL,
«D_ID» => $D_ID,
«D_NAME» => $D_NAME,
);
$ID_POST_TEMPLATE = intval(self::T_M);
break;
>
>
if ($send = CEvent::Send(self::TEMP_TYPE, «s1″, $arEventFields,»N»,$ID_POST_TEMPLATE)) return true;
return false;
>
Источник
Отправка 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» )) |
Папку со спамом проверял – ничего.
Единственный раз, когда письмо пришло (при этом попало в спам) – когда делал запрос через командную панель в админке:
Помогите найти решение! В Битриксе новичок. Возможно даже, проблема в другом месте.
Источник