Перейти к содержимому

Письмо с заявкой приходит пустым - разбор причин

Заявка сохранилась, письмо пришло, а внутри вместо значений пустые строки или имена полей. Разбираем причины по убыванию частоты, начиная с самого события.

С чего начать

Смотрим, с какими данными создано почтовое событие:

$rs = \CEvent::GetList('ID', 'DESC', ['EVENT_NAME' => 'VENDOR_FEEDBACK']);
$row = $rs->Fetch();
print_r(unserialize($row['C_FIELDS'], ['allowed_classes' => false]));
// здесь видно все поля события ровно в том виде, в каком их получил шаблон

Массив полей события отвечает на главный вопрос сразу. Пустые значения в нём означают, что данные не дошли до отправки, а заполненные переводят разбор к шаблону письма.

Сверяем коды подстановок с шаблоном:

$msg = \Bitrix\Main\Mail\Internal\EventMessageTable::getRow(['filter' => [
'=EVENT_NAME' => 'VENDOR_FEEDBACK'], 'select' => ['ID', 'LID', 'SUBJECT', 'BODY_TYPE']]);
print_r($msg);
// подстановки в шаблоне пишутся решётками вокруг кода поля события

Коды в шаблоне и ключи массива полей обязаны совпадать до символа. Лишний пробел или другой регистр превращают подстановку в обычный текст, который так и уезжает покупателю.

Отправляем тестовое письмо с заведомо полными данными:

\CEvent::SendImmediate('VENDOR_FEEDBACK', SITE_ID, [
'NAME' => 'Проверка', 'PHONE' => '+70000000000', 'MESSAGE' => 'текст заявки',
], 'N');
// если тестовое письмо пришло целым, дело в коде, который собирает поля

Смотрим, что попадает в поля из формы:

\Bitrix\Main\Diag\Debug::writeToFile($request->getPostList()->toArray(),
date('H:i:s'), 'feedback.log');
// массив запроса показывает реальные имена полей формы, а не ожидаемые

Причины

  1. Коды подстановок не совпадают с полями события примерно 30% случаев

    ПризнакВ письме видны сами подстановки решётками или пустые строки вместо значений.

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

    Что делатьПриводим коды к одному виду и проверяем результат тестовой отправкой письма.

  2. Множественные значения приходят массивом примерно 20% случаев

    ПризнакВ письме вместо списка значений виден массив или пустая строка.

    ПроверкаПечатаем поле события и смотрим, массив это или уже собранная строка.

    Что делатьСобираем множественные значения в строку до отправки, а не в шаблоне письма.

  3. Письмо собрано по другому шаблону примерно 20% случаев

    ПризнакТексты письма отличаются от того шаблона, который правили последним.

    ПроверкаСмотрим все шаблоны этого типа события и их привязку к сайтам проекта.

    Что делатьОтключаем лишние шаблоны и оставляем по одному активному на каждую витрину.

  4. Значения потерялись до отправки письма примерно 15% случаев

    ПризнакМассив полей события пустой, хотя заявка в базе сохранена целиком.

    ПроверкаПишем массив запроса в журнал и сверяем имена полей формы с ожидаемыми.

    Что делатьПравим сборку полей события: берём значения из запроса по их реальным именам.

  5. Вложения не прикладываются к письму примерно 15% случаев

    ПризнакТекст письма целый, а файла, приложенного посетителем, в письме нет.

    ПроверкаПроверяем, передаётся ли идентификатор файла в поля события отправки.

    Что делатьПередаём файл вложением события либо кладём в письмо ссылку на скачивание.

Частые вопросы

Где посмотреть, что ушло в письмо?

В очереди почтовых событий: там хранится массив полей ровно в том виде, в каком его получил шаблон. Это первое место разбора для любого письма.

Почему в письме видны сами подстановки?

Код подстановки не совпал ни с одним полем события и остался обычным текстом. Коды сверяют посимвольно, включая регистр букв.

Как передать список значений?

Собрать его в строку до отправки события, например через запятую или переносы. Шаблон письма массивы разворачивать не умеет.

Почему письмо не похоже на шаблон, который я правил?

У типа события несколько шаблонов, и активен другой либо привязанный к другому сайту. Лишние шаблоны отключают, оставляя по одному на витрину.

Можно ли приложить файл к письму?

Да, вложением почтового события, но крупные файлы лучше отдавать ссылкой. Ссылка не упирается в ограничения почтовых серверов на размер письма.

Смежное

Первоисточник