22
emailhtml
emailhtml
SYNOPSIS
emailhtml($text, $html, $to, $subject, $sender=false)
DESCRIPTION
emailhtml
sends $text
and $html
to $to
with the subject $subject
from $sender
.
$html
is a rich text in HTML. If it contains <img>
tags, the content of the image files are automatically attached to the email.
For security reasons, most email viewers hide an <img>
tag with an src
attribute which points to another document.
An embedded image content will normally be displayed.
$text
is a plain text version provided for a viewer which is not able or not allowed to display an HTML document.
CODE
- require_once 'filemimetype.php';
- function emailhtml($text, $html, $css, $to, $subject, $sender=false) {
- global $mailer, $webmaster, $sitename;
- if (!$sender) {
- $sender = $webmaster;
- }
- $textheader=$textbody=$htmlheader=$htmlbody=false;
- if ($text) {
- $textheader = 'Content-Type: text/plain; charset=utf-8';
- $textbody = <<<_SEP_
- $text
- _SEP_;
- }
- $related=false;
- if ($html) {
- $related=array();
- if (preg_match_all('#<img[^>]+src="([^"]*)"[^>]*>#is', $html, $matches)) {
- $pattern=array();
- $replacement=array();
- foreach ($matches[1] as $url) {
- if ($url[0] != '/')
- continue;
- if (array_key_exists($url, $related))
- continue;
- $fname=ROOT_DIR . $url;
- $filetype=file_mime_type($fname, false);
- if (!$filetype or strpos($filetype, 'image') !== 0)
- continue;
- $data=file_get_contents($fname);
- if (!$data)
- continue;
- $base64=chunk_split(base64_encode($data));
- $cid=md5(uniqid('cid', true));
- $qfname=preg_quote($url);
- $pattern[]='#(<img[^>]+src=)"' . $qfname . '"([^>]*>)#is';
- $replacement[]='${1}"cid:' . $cid . '"${2}';
- $related[$url]=array(basename($fname), $filetype, $cid, $base64);
- }
- $html=preg_replace($pattern, $replacement, $html);
- }
- $title=htmlspecialchars($sitename, ENT_COMPAT, 'UTF-8');
- $htmlheader = 'Content-Type: text/html; charset=utf-8';
- $htmlbody = <<<_SEP_
- <html>
- <head>
- <meta http-equiv="content-type" content="text/html; charset=utf-8">
- <title>$title</title>
- <style type="text/css">
- $css
- </style>
- </head>
- <body>
- $html
- </body>
- </html>
- _SEP_;
- }
- $headers = <<<_SEP_
- From: $sender
- Return-Path: $sender
- X-Mailer: $mailer
- _SEP_;
- $body='';
- if ($related) {
- if ($textbody) {
- $sep=md5(uniqid('sep', true));
- $body .= <<<_SEP_
- Content-Type: multipart/alternative; boundary="$sep"
- --$sep
- $textheader
- $textbody
- --$sep
- $htmlheader
- $htmlbody
- --$sep--
- _SEP_;
- }
- else {
- $body .= <<<_SEP_
- $htmlheader
- $htmlbody
- _SEP_;
- }
- $sep=md5(uniqid('sep', true));
- $headers .= <<<_SEP_
- Content-Type: multipart/related; boundary="$sep"
- _SEP_;
- foreach ($related as $url => $r) {
- list($filename, $filetype, $cid, $base64)=$r;
- $body .= <<<_SEP_
- --$sep
- Content-Type: $filetype
- Content-Transfer-Encoding: base64
- Content-Disposition: inline; filename="$filename"
- Content-ID: <$cid>
- $base64
- _SEP_;
- }
- $body = <<<_SEP_
- --$sep
- $body
- --$sep--
- _SEP_;
- }
- else if ($textbody and $htmlbody) {
- $sep=md5(uniqid('sep', true));
- $headers .= <<<_SEP_
- Content-Type: multipart/alternative; boundary="$sep"
- _SEP_;
- $body .= <<<_SEP_
- --$sep
- $textheader
- $textbody
- --$sep
- $htmlheader
- $htmlbody
- --$sep--
- _SEP_;
- }
- else if ($textbody) {
- $headers .= $textheader;
- $body=$textbody;
- }
- else if ($htmlbody) {
- $headers .= $htmlheader;
- $body=$htmlbody;
- }
- return @mail($to, $subject, $body, $headers);
- }
Comments