From: Christian Weiske Date: Fri, 17 Jun 2016 19:36:03 +0000 (+0200) Subject: Make CSS inline in HTML mails X-Git-Tag: v0.6.1~1 X-Git-Url: https://git.cweiske.de/bdrem.git/commitdiff_plain/d6b4a3d614aeaccf45fb047a3e990f77b935a333?hp=5c88f5e19a69485da44e132e0b102b835eee7f05 Make CSS inline in HTML mails --- diff --git a/src/bdrem/Renderer/Html.php b/src/bdrem/Renderer/Html.php index e802faf..10059ab 100644 --- a/src/bdrem/Renderer/Html.php +++ b/src/bdrem/Renderer/Html.php @@ -76,6 +76,7 @@ class Renderer_Html extends Renderer $tr = new Renderer_HtmlTable(); $table = $tr->render($arEvents); + $css = static::getCss(); $s = << bdrem -$links + + +$table + + +HTM; + return $s; + } + + /** + * Get the CSS for the HTML table + */ + public static function getCss() + { + return << - - -$table - - -HTM; - return $s; +CSS; } } ?> diff --git a/src/bdrem/Renderer/Mail.php b/src/bdrem/Renderer/Mail.php index d7aef3e..0efa3af 100644 --- a/src/bdrem/Renderer/Mail.php +++ b/src/bdrem/Renderer/Mail.php @@ -28,6 +28,18 @@ require_once 'Mail/mime.php'; */ class Renderer_Mail extends Renderer { + /** + * Add HTML part to email + * @var bool + */ + public $html = true; + + /** + * CSS "inline" in tags, or "separate" in a style block + * @var string + */ + public $css = 'inline'; + /** * Render the events - send out mails. * @@ -52,8 +64,8 @@ class Renderer_Mail extends Renderer $subject .= ': ' . implode(', ', $todays); } - $rc = new Renderer_Console(); - $rh = new Renderer_Html(); + $rc = new Renderer_Console(); + $rht = new Renderer_HtmlTable(); $hdrs = array( 'From' => $this->config->get('mail_from', 'birthday@example.org'), @@ -69,7 +81,20 @@ class Renderer_Mail extends Renderer ); $mime->setTXTBody($rc->render($arEvents)); - $mime->setHTMLBody($rh->render($arEvents)); + if ($this->html) { + if ($this->css == 'inline') { + $html = $this->inlineCss( + $rht->render($arEvents), + Renderer_Html::getCss() + ); + } else { + $html = '' + . $rht->render($arEvents); + } + $mime->setHTMLBody($this->minifyHtml($html)); + } $body = $mime->get(); $hdrs = $mime->headers($hdrs); @@ -107,5 +132,113 @@ class Renderer_Mail extends Renderer return mb_substr($str, 0, $len - 1) . '…'; } + + /** + * Takes the HTML and CSS code and inlines CSS into HTML. + * + * This is important for some e-mail clients which do + * not interpret