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
  1. require_once 'filemimetype.php';
  1. function emailhtml($text, $html, $css, $to, $subject, $sender=false) {
  2.     global $mailer, $webmaster, $sitename;
  3.  
  4.     if (!$sender) {
  5.         $sender = $webmaster;
  6.     }
  7.  
  8.     $textheader=$textbody=$htmlheader=$htmlbody=false;
  9.  
  10.     if ($text) {
  11.         $textheader = 'Content-Type: text/plain; charset=utf-8';
  12.         $textbody = <<<_SEP_
  13. $text
  14.  
  15. _SEP_;
  16.     }
  17.  
  18.     $related=false;
  19.  
  20.     if ($html) {
  21.         $related=array();
  22.         if (preg_match_all('#<img[^>]+src="([^"]*)"[^>]*>#is', $html, $matches)) {
  23.             $pattern=array();
  24.             $replacement=array();
  25.             foreach ($matches[1] as $url) {
  26.                 if ($url[0] != '/')
  27.                     continue;
  28.                 if (array_key_exists($url, $related))
  29.                     continue;
  30.                 $fname=ROOT_DIR . $url;
  31.                 $filetype=file_mime_type($fname, false);
  32.                 if (!$filetype or strpos($filetype, 'image') !== 0)
  33.                     continue;
  34.                 $data=file_get_contents($fname);
  35.                 if (!$data)
  36.                     continue;
  37.                 $base64=chunk_split(base64_encode($data));
  38.                 $cid=md5(uniqid('cid', true));
  39.                 $qfname=preg_quote($url);
  40.                 $pattern[]='#(<img[^>]+src=)"' . $qfname . '"([^>]*>)#is';
  41.                 $replacement[]='${1}"cid:' . $cid . '"${2}';
  42.                 $related[$url]=array(basename($fname), $filetype, $cid, $base64);
  43.             }
  44.  
  45.             $html=preg_replace($pattern, $replacement, $html);
  46.         }
  47.  
  48.         $title=htmlspecialchars($sitename, ENT_COMPAT, 'UTF-8');
  49.  
  50.         $htmlheader = 'Content-Type: text/html; charset=utf-8';
  51.         $htmlbody = <<<_SEP_
  52. <html>
  53. <head>
  54. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  55. <title>$title</title>
  56. <style type="text/css">
  57. $css
  58. </style>
  59. </head>
  60. <body>
  61. $html
  62. </body>
  63. </html>
  64.  
  65. _SEP_;
  66.     }
  67.  
  68.     $headers = <<<_SEP_
  69. From: $sender
  70. Return-Path: $sender
  71. X-Mailer: $mailer
  72.  
  73. _SEP_;
  74.  
  75.     $body='';
  76.  
  77.     if ($related) {
  78.         if ($textbody) {
  79.             $sep=md5(uniqid('sep', true));
  80.  
  81.             $body .= <<<_SEP_
  82. Content-Type: multipart/alternative; boundary="$sep"
  83.  
  84. --$sep
  85. $textheader
  86.  
  87. $textbody
  88. --$sep
  89. $htmlheader
  90.  
  91. $htmlbody
  92. --$sep--
  93.  
  94.  
  95. _SEP_;
  96.         }
  97.         else {
  98.             $body .= <<<_SEP_
  99. $htmlheader
  100.  
  101. $htmlbody
  102.  
  103. _SEP_;
  104.         }
  105.  
  106.         $sep=md5(uniqid('sep', true));
  107.  
  108.         $headers .= <<<_SEP_
  109. Content-Type: multipart/related; boundary="$sep"
  110. _SEP_;
  111.  
  112.         foreach ($related as $url => $r) {
  113.             list($filename, $filetype, $cid, $base64)=$r;
  114.             $body .= <<<_SEP_
  115. --$sep
  116. Content-Type: $filetype
  117. Content-Transfer-Encoding: base64
  118. Content-Disposition: inline; filename="$filename"
  119. Content-ID: <$cid>
  120.  
  121. $base64
  122.  
  123. _SEP_;
  124.         }
  125.  
  126.         $body = <<<_SEP_
  127. --$sep
  128. $body
  129. --$sep--
  130. _SEP_;
  131.     }
  132.     else if ($textbody and $htmlbody) {
  133.         $sep=md5(uniqid('sep', true));
  134.  
  135.         $headers .= <<<_SEP_
  136. Content-Type: multipart/alternative; boundary="$sep"
  137. _SEP_;
  138.         $body .= <<<_SEP_
  139. --$sep
  140. $textheader
  141.  
  142. $textbody
  143. --$sep
  144. $htmlheader
  145.  
  146. $htmlbody
  147. --$sep--
  148. _SEP_;
  149.     }
  150.     else if ($textbody) {
  151.         $headers .= $textheader;
  152.         $body=$textbody;
  153.     }
  154.     else if ($htmlbody) {
  155.         $headers .= $htmlheader;
  156.         $body=$htmlbody;
  157.     }
  158.  
  159.     return @mail($to, $subject, $body, $headers);
  160. }
VOIR AUSSI

filemimetype, emailcrypto, emailme, emailtext

Commentaires

Votre commentaire :
[p] [b] [i] [u] [s] [quote] [pre] [br] [code] [url] [email] strip aide 2000

Entrez un maximum de 2000 caractères.
Améliorez la présentation de votre texte avec les balises de formatage suivantes :
[p]paragraphe[/p], [b]gras[/b], [i]italique[/i], [u]souligné[/u], [s]barré[/s], [quote]citation[/quote], [pre]tel quel[/pre], [br]à la ligne,
[url]http://www.izend.org[/url], [url=http://www.izend.org]site[/url], [email]izend@izend.org[/email], [email=izend@izend.org]izend[/email],
[code]commande[/code], [code=langage]code source en c, java, php, html, javascript, xml, css, sql, bash, dos, make, etc.[/code].