Заметки
Как отправить HTML из поля в письмо без экранирования
Если письмо показывает <p> и <br> как текст, проверьте две вещи: отправляется ли письмо в HTML-формате и не было ли значение заранее экранировано. CSS white-space: pre-wrap не превращает <p> обратно в HTML.
Для обычного текстового поля достаточно экранировать спецсимволы и отдельно сохранить переносы:
$safe_text = htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8');
$html_text = nl2br($safe_text); Полученный $html_text передают в поле HTML-шаблона, не экранируя повторно. Это вариант для обычного текста, а не для произвольной готовой разметки.
Если источник действительно содержит HTML, его нужно очистить разрешённым набором тегов и атрибутов. Отключать экранирование для любого значения из CRM опасно: поле может содержать внешние ссылки, изображения и чужую разметку. Проверяйте результат в самом письме, поскольку почтовые клиенты поддерживают CSS не так, как браузер.