Чтобы Postfix не переносил сверхдлинные строки после smtp_line_length_limit
(обычно 998 символов), я сейчас использую аккуратная библиотека php для переноса длинных строк в сообщения электронной почты HTML (см. связанные вопрос):
$oTidy = new tidy();
$message = $oTidy->repairString($message,
array("show-errors" => 0, "show-warnings" => false, "force-output" => true,
"alt-text" => "Please display images", "bare" => true, "doctype" => "auto",
"drop-empty-paras" => false, "fix-bad-comments" => false, "fix-uri" => true,
"join-styles" => false, "merge-divs" => true, "merge-spans" => true,
"preserve-entities" => true, "wrap" => 68),
"utf8"
);
Tidy действительно хорош в переносе длинных строк, оставляя HTML и CSS действительными.
К сожалению, это больше похоже на попытку исправить недопустимую разметку HTML, изменить HTML-теги, типы документов и т. Д.
Однако мне нужен только перенос строк - другие вещи, которые делает tidy, накладные и иногда скорее раздражают, чем что-либо еще.
Теперь я попытался использовать функцию wrapText()
PHPMailer. К сожалению, я обнаружил ошибку, которая делает его бесполезным для меня.
PHPMailer преобразует этот исходный код
<html>
<body>
Loremipsumdolorsitametconsetetursadipscing<span style="font-family:'Courier New',sans-serif">lorem</span>
</body>
</html>
to
<html>
<body>
Loremipsumdolorsitametconsete<span style="font-family:'Courier
New',sans-serif">lorem</span>
</body>
</html>
нарушение форматирования шрифта (Courier New) для слова lorem в некоторых клиентах.
Теперь мои вопросы:
Как безопасно обернуть строки HTML, не повредив HTML и CSS?
Как это делает Tidy? Стоит ли использовать парсер DOM? Есть ли php-версия исходного кода Tidy (я ее не нашел)?