И, если кому будет полезно, в моём случае, в работе с Битрикс, там тело письма приходит как есть, то есть с разделением на текстовую и html версию, если стоит настройка, по умолчанию она по-моему стоит. Чтобы не париться и не парсить приходящее тело письма и далее декодировть отдельные части письма, убрал в настройках главного модуля галку "Генерировать текстовую версию для html-писем", а текстовую версию уже сам добавлял.
Ну и если письмо составное, типа multipart/alternative, то пришлось каждый блок, разделённый boundary, кодировать в base64 и проставлять для каждого блока
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
к сожалению не работает
дело в том, что float: left работает во всех браузерах, например если бы было мало контента, 2 картинки, то ширина блока равнялась бы ширине контента, но вот когда содержимого много в местах переноса на новую строку образуются эти пустоты