Intereting Posts
Codeigniter URI Class, как я могу использовать – дефис вместо _ подчеркивание? Загрузите php-контент с помощью jQuery AJAX phpStorm запрашивает встроенный интерпретатор php-cgi. Как сделать php как быстрый cgi? Нужно ли использовать автозагрузку PHP для использования папок? Значение Doctrine 2 + unsigned вытаскивание списка из сообщения WordPress Я продолжаю получать сообщение об ошибке, использую функцию else в PHP PHP добавляет один массив в другой (а не array_push или +) регулярное выражение для учета периодов после числового символа только в php Как сопоставить динамический массив полей ввода Загружать список файлов одновременно в PHP Необходимо загрузить файлы в документы Google из моего приложения и сохранить ссылку на загруженный файл Почему я получаю «неопределенную переменную» в представлении Laravel? find () на модели дает id как строку в одной среде, а int в другой Ошибка с fsockopen () и SSL, «Не удалось включить криптографию»,

Как отправить HTML-письма с включенным CSS с помощью PHPMailer?

У меня проблема с отправкой HTML-писем с помощью PHPMailer . Я делаю шаблон Smarty, и у меня есть весь HTML-код, но когда я отправляю почту, я получаю почту без встроенного CSS (это только фоновый цвет, шрифт или что-то в этом роде). В PHPMailer я устанавливаю, что почта – это HTML.

Есть ли способ отправить HTML-почту с включенным CSS?

Есть способ …

$body = <<< YOUR_HTML_WITH_CSS_STYLE_TAGS <html> <head> <style> body * {width:1px;} #adiv {padding:2px;} .aclass {margin:3px;} </style> </head> <body> <div> some html </div> <div id="adiv"> <p class="aclass"> </p> </div> </body> </html> YOUR_HTML_WITH_CSS_STYLE_TAGS; $doc = new DOMDocument(); @$doc->loadHTML($body); $xpd = new DOMXPath($doc); 0&&$node = new DOMElement(); $result = $xpd->query('//img'); foreach($result as $node){ $attr = $node->getAttribute('src'); $re = '/(http:\/\/.*?)?(\/.*+)/i'; if(preg_match_all($re, $attr, $matches)){ if(!empty($matches[1][0])&&0) continue; $attr = 'http://'.$_SERVER['HTTP_HOST'].$matches[2][0]; } $node->setAttribute('src',$attr); } false&&$node=new DOMElement()&&$child=new DOMElement(); $result = $xpd->query('//style/..'); foreach($result as $node){ foreach($node->childNodes as $child){ if(strtolower($child->nodeName)=='style'){ $node->removeChild($child); $css = $child->textContent; $re = '/(.*?)\{([^}]+)\}/'; if(preg_match_all($re, $css, $matches)){ foreach($matches[1] as $idx=>$css_selector){ $css_text = $matches[2][$idx]; $css_text = preg_replace('/\s+/',' ',$css_text); $css = new CSSQuery($doc); foreach($css->query($css_selector) as $selected_node){ $style = $selected_node->getAttribute('style'); $selected_node->setAttribute('style', $style?$css_text:$style.';'.$css_text); } } } } } } $body = $doc->saveHTML(); 

Этот код будет генерировать вывод HTML в $ body следующим образом:

 <html> <head> </head> <body> <div style="width:1px;"> some html </div> <div id="adiv" style="width:1px;padding:2px;"> <p class="aclass" style="width:1px;margin:3px;"> </p> </div> </body> </html> 

Класс CSSQuery можно найти на phpclasses.org . Эта реализация основана на том факте, что большинство веб-сайтов позволяют добавлять стиль только с помощью стиля атрибута встроенного тега, а не через теги стиля или теги ссылок.

Это довольно ограничено и с ограниченным синтаксисом из-за регулярного выражения, это просто, но все же лучше, чем писать собственные атрибуты стиля в каждом теге HTML.

Поддержка CSS в электронной почте очень ограничена, по крайней мере. Самая большая проблема заключается в том, что разные клиенты поддерживают разные наборы CSS-свойств.

Для нас очень мало условий для работы.

  • Как отображается ваш адрес электронной почты? Совпадает ли CSS вообще? Ваш CSS отображается на экране как текст?
  • Как выглядит ваш CSS?
  • Как выглядит ваш шаблон электронной почты?

Для получения дополнительной информации о поддержке CSS в электронной почте, пожалуйста, ознакомьтесь с этим превосходным обзором.

Некоторые клиенты электронной почты отделяют раздел <head>, поэтому добавьте теги <style> </ style> в <body>.

Как ссылается ваша таблица стилей?

Для электронной почты вам нужно либо предоставить абсолютный путь к вашей таблице стилей, либо включить стили в начало шаблона

Я предполагаю, что у вас есть CSS во внешнем файле, и поэтому самым простым решением было бы просто переместить его в заголовок html внутри почты.

Тем не менее, поддержка css в почтовых клиентах очень неудобна, поэтому с их стороны может быть просто дерьмовая рендеринг.

Я нашел, что самая лучшая (самая читаемая) поддержка CSS – inline (style = ""). Печально, но верно.

Вот действительно хорошая статья SitePoint, посвященная HTML-сообщениям электронной почты « Как кодировать HTML-бюллетени электронной почты ».

HTML и CSS чреваты болью и разочарованием. Ничего общего с PHP, очевидно, что большинство кашлей кашля кашля были и остаются архаичными.

Это единственная область, где я бы посоветовал это (и у кого-то еще могло бы быть лучшее понимание / план *), но вы должны посмотреть на сокращение CSS и написание стиля html в стиле середины 90 с помощью <table>, <font> и <hr > теги (о мой)

** Поделись, пожалуйста :)*