ПроблемаЕсли отсылать почтовый шаблон типа html, то text часть письма генерируется неадекватно. Зачастую, оно содержит набор css стилей, а не читаемого кириллического текста:

Из-за этого сильно увеличивается вероятность попадания письма в спам. Потому что популярной спаморез "SpamAssassin" узнает несоответствие html и text части письма. И уменьшает "спам" рейтинг письма на полтора балла (это очень много) за неадекватную text часть (если быть точным сейчас на -1.483 балла "
MPART_ALT_DIFF_COUNT").
.
На текущий момент в битриксе нет возможности отправить письмо без особых доработок, в котором обе части (html,text) заданы вручную. Приходится делать шаблон сообщения типа text, вставлять туда обе части письма и при отправке в функции custom_mail добавлять заголовок:
Content-Type: multipart/alternative; boundary="...." |
Только так возможно задать обе части письма. И не потерять 1.5 балла в спам рейтинге.
Как исправить проблему?
Писал об этой проблеме в техподдержку в 2014 году. Они согласились, что беда. Прошло четыре года - задачи всё ещё стоит. Возможно, разработчики не хотят слишком сильно модифицировать систему стандартной отправки шаблонов. С другой стороны, на каждом проекте создавать функцию custom_mail - уже порядком надоело (уже 2018 год как бы...).
Поэтому предлагаю три "щадящих" способа решения проблемы. Чтобы не модифицировать БУС и при этом уйти от custom_mail...
1. Можно отремонтировать автоматическую генерацию text части письма для писем типа html. Но есть подозрение, что его создаёт не БУС, а сама функцию mail() в php. В любом случае, можно же перенести её создание на сторону БУС и отправлять multipart письма с адекватными частями, как сейчас делаем это через custom_mail().
2. Можно перед отправкой почтового шаблона делать проверку, есть ли в дополнительных параметрах ключ Content-type. Если есть, то не добавлять его перед отправкой. Тогда для создания письма с двумя частями: ставим шаблону тип text, в тело вставляем обе части (html/text) с boundary обрамлением и в дополнительных параметрах шаблона пишем:

На данный момент такое сделать невозможно. Потому что при отправке принудительно вставляется Content-Type:text последним заголовком (если выбран тип шаблона text). Вот если бы он заменялся на значение Content-Type из additional_headers, то всё бы сработало.
3. Можно сделать событие (чтобы можно было сделать его обработчик), которое вызывается после добавления Content-Type в дополнительные заголовки системой. Чтобы можно было вручную изменить значение Content-Type непосредственно перед отправкой.
И?Сейчас на каждом проекте приходится создавать функцию custom_mail, чтобы отправлять письма html+text с адекватным содержанием. Автоматическая генерация text части письма типа html не работает, поэтому SpamAssassin нещадно режет письма на 1.5 балла.