Преобразование PHPMailer HTML-сообщения в текстовое сообщение

Я хочу отправить письмо с использованием HTML, если это разрешено клиентом, иначе текст. Что-то вроде следующего:

$mail = new PHPMailer();
$htmlMessage="Hello John,<br /><br />How are you?";
$textMessage="Hello John,\n\nHow are you?";
$mail->Body =  $htmlMessage;
$mail->AltBody  =  $textMessage;

Однако я не хочу выписывать сообщение целиком для обоих, но создаю одну версию и автоматически преобразую ее во вторую.

Учитывая это точное сообщение, я должен просто создать $textMessage, а затем использовать nl2br() добавить HTML разрывы строк?

Что, если мое HTML-сообщение было немного сложнее и содержало жирный текст, список и т. Д.? Я согласен с тем, что текстовое сообщение несколько уродливо, но я не хочу, чтобы в сообщении была куча HTML-тегов. Каковы мои варианты для этого сценария?

0

Решение

Э-э, вы знаете, что PHPMailer имеет два встроенные конвертеры HTML в обычный текст? Strip_tags это довольно плохое решение — оно часто приводит к нечитаемому беспорядку. Лучшие результаты, которые я получил от использования настоящего текстового браузера (в частности, ELinks), которая может сделать большую работу по визуализации HTML в виде текста, способную сохранять такие вещи, как сохранение многостолбцовых макетов, подчеркивание, ссылки на ссылки и некоторые CSS. Однако обстрел не всегда возможен, поэтому существуют PHP-решения.

PHPMailer выполняет автоматическое преобразование для простой текстовой версии в msgHTML(), так что ваш код будет просто так:

$mail = new PHPMailer();
$htmlMessage="Hello John,<br /><br />How are you?";
$mail->msgHTML($htmlMessage);

Есть опция для немного более продвинутого конвертера (в комплекте extras папку), который вы можете вызвать, установив «расширенный» параметр в msgHTML:

$mail->msgHTML($htmlMessage, '', true);

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

Обновить С тех пор, как я опубликовал этот ответ, PHPMailer пришлось удалить класс html2text из комплекта по лицензионным причинам, но механизм для добавления собственного конвертера был улучшен — advanced Параметр теперь может быть замыканием, с помощью которого вы можете реализовать свой собственный конвертер, такой как любой из тех, которые вы можете найти на упаковке.

1

Другие решения

Хотя не на 100% хорошо выглядит (в зависимости от содержимого HTML), strip_tags() будет делать то, что вы хотите.

$mail = new PHPMailer();
$htmlMessage="Hello John,<br /><br />How are you?";
$textMessage="Hello John,\n\nHow are you?";
$mail->Body =  $htmlMessage;
$mail->AltBody  =  strip_tags( $htmlMessage );

Вы не хотели бы использовать nl2br() поскольку AltBody ожидает только простой текст. Появится любое форматирование HTML <br/> будет отображаться как текст в вашем контенте). Вы могли бы сделать что-то вроде:

$mail->AltBody  =  strip_tags( str_replace( $htmlMessage, array( '<br>', '<br/>', '<br />' ), "\r\n" ) );
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector