7
emailhtml
emailhtml
SYNOPSIS
emailhtml($text, $html, $to, $subject, $sender=false)
DESCRIPTION
emailhtml
envoie les messages $text
et $html
à $to
avec le sujet $subject
de la part de $sender
.
$html
est un texte riche en HTML. S'il contient des balises <img>
, les contenus des fichiers des images sont automatiquement attachés à l'email.
Pour des raisons de sécurité, la plupart des afficheurs d'emails cachent une balise <img>
avec un attribut src
qui pointent sur un autre document.
Le contenu d'une image insérée est normalement affiché.
$text
est une version en texte simple destinée à un afficheur qui ne peut pas ou n'est pas autorisé à afficher un document HTML.
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);
- }
Commentaires