*/ class Mail { // Déclaration des variables de la classe /** * Encodage du mail */ var $charset; /** * le destinataire */ var $destinataire = array(); /** * l'expéditeur du message */ var $expediteur = array(); /** * la partie header du message ce qui est en général cacher mais bon faut bien le definir */ var $headers = array(); /** * sujet du message */ var $sujet; /** * le message à propremetn parler */ var $message; /** * la signature du message */ var $signature; /** * le type de mail, html(true) ou texte(false) */ var $type_mail; /** * utiliser si on utilise les templates */ var $tpl_mail; var $tpl_src; /** * langue du mail utiliser s on utilise les templates */ var $langue_mail; /** * définit si on utilise des tpl ou pas, true si on en utilise pas , false si on en utilise */ var $not_use_tpl; /** * Constructeur de la classe, recoit l'encodage des mails. * Par défaut on utilise le syteme de templates. * * @param string charset encodage du charactère * @param bool use_tpl true si on utilise les templates */ function Mail($charset = 'ISO-8859-1', $use_tpl = true) { $this->charset = $charset; $this->reset_vars(); // Utilises t'on le système de template? if ($use_tpl) { $this->use_tpl(); } } /** * Si on utilise les tpl, il faut obligatoirement passer par ici..... */ function use_tpl() { global $racine; $this->tpl_mail = new Tpl($racine); $this->not_use_tpl = FALSE; } /** * En cas d'utilisation du template... * On définit le nom du fichier tpl * * @param string file fichier tpl utiliser */ function set_mail($file) { global $racine; $file_tpl = 'langues/' . $this->langue_mail . 'mail/' . $file; $this->tpl_mail->set_filenames(array('mail' => $file_tpl)); } /** * Non utilisation du template... * Pour envoyer rapidement un mail en mode texte c'est ici. * * @param string to email du destinataire * @param string from email de l'expéditeur * @param string message message à envoyer au format choisi * @param string sujet sujet de l'email * @param string mime_type type mime du mail exemple : text/plain ou text/html * * @return bool true en cas de succès */ function simple_mail($to, $from, $message, $sujet, $mime_type = 'text/plain') { $this->message(array(), $message); $this->sujet($sujet); $this->expediteur($from); $this->destinataire($to); $this->type_mime_mail($mime_type . '; charset="' . $this->charset . '"'); return ($this->envoie()); } /** * Définit la langue du mail. * * @param string langage répertoire langue (exemple fr/ ) */ function set_langue($langage) { $this->langue_mail = $langage; } /** * On donne l'adresse du destinataire et si on le désire son nom. * * @param string dest_mail email de destination de l'email * @param string dest_name nom du destinataire de l'email (par exemple : toto ou une "bête") */ function destinataire($dest_mail, $dest_name = '') { $this->destinataire['to'] = (empty($dest_name)) ? trim($dest_mail) : trim('"' . str_replace('"', '\"', trim($dest_name)) . '" <' . trim($dest_mail) . '>'); } /** * Destinataire du mail en copie * * @param string dest_mail email de destination de l'email * @param string dest_name nom du destinataire de l'email (par exemple : toto ou une "bête") */ function cc($dest_mail, $dest_name = '') { $this->destinataire['cc'][] = (!empty($dest_name)) ? '"' . str_replace('"', '\"', trim($dest_name)) . '" <' . trim($dest_mail) . '>' : trim($dest_mail); } /** * Destinataire du mail en copie cachée * * @param string dest_mail email de destination de l'email * @param string dest_name nom du destinataire de l'email (par exemple : toto ou une "bête") */ function bcc($dest_mail, $dest_name = '') { $this->destinataire['bcc'][] = (!empty($dest_name)) ? '"' . str_replace('"', '\"', trim($dest_name)) . '" <' . trim($dest_mail) . '>' : trim($dest_mail); } /** * Expéditeur du messsage. * * @param string exp_mail email de l'expéditeur * @param string exp_name nom de l'expéditeur */ function expediteur($exp_mail, $exp_name = '') { $this->expediteur['from'] = (!empty($exp_name)) ? '"' . str_replace('"', '\"', trim($exp_name)) . '" <' . trim($exp_mail) . '>' : trim($exp_mail); } /** * Repondre à... * * @param string exp_mail email de l'expéditeur * @param string exp_name nom de l'expéditeur */ function reply_to($exp_mail, $exp_name = '') { $this->destinataire['reply-to'][] = (!empty($exp_name)) ? '"' . str_replace('"', '\"', trim($exp_name)) . '" <' . trim($exp_mail) . '>' : trim($exp_mail); } /** * permet l'ajout d'options spécial au headers * * ATTENTION bien comprendre les headers pour pouvoir l'utiliser * quelques explication suplémentaires là : http://phpcodeur.net/articles/php/emails ; http://www.sitepoint.com/article/advanced-email-php ; http://www.mailsbroadcast.com/email.bolts&nuts/emailing.nutshell.htm * les définition de base : http://www.faqs.org/rfcs/rfc822 ; http://www.faqs.org/rfcs/rfc2822 ; http://www.faqs.org/rfcs/rfc2045 ; http://www.faqs.org/rfcs/rfc2046 ; http://www.faqs.org/rfcs/rfc2047 ; http://www.faqs.org/rfcs/rfc2049 ; http://www.faqs.org/rfcs/rfc1896 ; http://www.faqs.org/rfcs/rfc4356 * * @param string type type de l'header (exemple : X-Priority, reply-to, from, ...) * @param string headers la valeur du type. */ function headers_mail($type, $headers) { $this->headers[$type] = trim($headers); } /** * definit la priorité du message de 5 à 1 * * @param int prior priorité de l'email de 1 (high) à 5 (low) */ function priorite($prior = 3) { switch ($prior) { case 1: // non standart mais ancien système $this->headers_mail('X-Priority', '1 (highest)'); // standart mais pas toujours suporter $this->headers_mail('X-Mms-Priority', 'High'); // standart et pris par défaut ... $this->headers_mail('Importance', 'High'); // special microsoft .... $this->headers_mail('X-MSMail-Priority', 'High'); break; case 2: $this->headers_mail('X-Priority', '2 (high)'); $this->headers_mail('X-Mms-Priority', 'High'); $this->headers_mail('X-MSMail-Priority', ''); $this->headers_mail('Importance', 'High'); break; case 3: $this->headers_mail('X-Priority', '3 (normal)'); $this->headers_mail('X-MSMail-Priority', 'Normal'); // pas de importance ni de mms car la priorité normal ne dit rien ... break; case 4: $this->headers_mail('X-Priority', '4 (low)'); $this->headers_mail('X-Mms-Priority', 'Low'); $this->headers_mail('X-MSMail-Priority', 'Low'); $this->headers_mail('Importance', 'Low'); break; case 5: $this->headers_mail('X-Priority', '5 (lowest)'); $this->headers_mail('X-Mms-Priority', 'Low'); $this->headers_mail('X-MSMail-Priority', 'Low'); $this->headers_mail('Importance', 'Low'); default: $this->priorite(3); } } /** * definit l'adresse de retour en cas d'erreur * * @param string erreur_mail adresse email d'envoi du mail d'erreur. */ function erreur_mail($erreur_mail) { $this->headers_mail('Return-Path', $erreur_mail); } /** * Set le type mime du mail * * @param string type type de l'email (exemple: text/plain, text/html, text/enriched, ...) */ function type_mime_mail($type) { $this->type_mail = (preg_match('/text\/html/si', $type)) ? TRUE : FALSE; $this->headers_mail('Content-Type', $type); } /** * utiliser la notification de mail et donner l'adresse de reception de cette notification * * @param string maildenotification email de notification de réception du message */ function notification_mail($maildenotification) { $this->headers_mail('Disposition-Notification-To', $maildenotification); } /** * utiliser la notification de mail et donner l'adresse de reception de cette notification * * @param string maildenotification email de notification de lecture du message */ function notificationdelecture($maildenotification) { $this->headers_mail('X-Confirm-Reading-To', $maildenotification); } /** * définit l'encodage utilisé par le contenu de l'email ou une partie de celui-ci * * @param string encodage_mail encodage de l'email (exemple : 7bit, 8bit) */ function encodage_mail($encodage_mail) { $this->headers_mail('Content-Transfer-Encoding', $encodage_mail); } /** * Assigne un sujet au mail. * * @param string sujet sujet de l'email */ function sujet($sujet) { $this->sujet = trim($sujet); } /** * Assigne un message au mail * * @param array t_var tableau contenant les variable tpl à remplacer ( exemple : 'TOTO' => $toto, .... ) * @param string message message lorsque l'on n'utilise pas de tpl ... */ function message($t_var = array(), $message = '') { if (!$this->not_use_tpl) { $this->tpl_mail->assign_vars($t_var); $this->message = $this->tpl_mail->pparse('mail', GET_CODE); } else { $this->message = $message; } } /** * On définit la signature si il y a lieu * * @param string sign signature du mail, sera inséré dans le bas de l'email */ function signature($sign) { if ($this->not_use_tpl) { $this->signature = $sign; } else { $this->tpl_mail->assign_vars(array('SIGNATURE' => $sign)); } } /** * On envoi l'email avec tout ce qui à été précédement prédéfinit * renvoi TRUE ou FALSE. * * @param bool sendmail true si on utilise smtp * * @return bool true si le mail à été envoyé */ function envoie($sendmail = false) { global $HTTP_SERVER_VARS; unset($header); $header = 'From: ' . $this->expediteur['from'] . "\n"; $header .= (!empty($this->expediteur['reply-to'])) ? 'Reply-to: ' . $this->expediteur['reply-to'] . "\n" : '' ; if (count($this->destinataire['cc'])) { // on sépare les destinataires par des virgules $cc_mail = implode(", ", $this->destinataire['cc']); $header .= (!empty($cc_mail)) ? 'Cc: ' . $cc_mail . "\n" : ''; } if (count($this->destinataire['bcc'])) { // on sépare les destinataires par des virgules $bcc_mail = implode(", ", $this->destinataire['bcc']); $header .= (!empty($bcc_mail)) ? 'Bcc: ' . $bcc_mail . "\n" : '' ; } $this->headers['X-Mailer'] = 'FSB 1.0.x'; $this->headers['X-AntiAbuse'] = 'Sender IP - ' . $HTTP_SERVER_VARS['REMOTE_ADDR'] . '/Server Name - <' . $HTTP_SERVER_VARS['SERVER_NAME'] . '>'; $this->headers['MIME-Version'] = '1.0'; // si il n'y a pas de type défini c'est du texte par défaut if (empty($this->headers['Content-Type'])) { $this->type_mime_mail('text/plain; charset="' . $this->charset . '"'); } // si il n'y a pas de date définie on la définit if (empty($this->headers['Date'])) { $this->headers['Date'] = date("D, j M Y H:i:s O"); } // on met générer le message_id qui caractérise un message unique.... $this->headers['Message-ID'] = '<' . md5(uniqid(rand())) . '@' . $HTTP_SERVER_VARS['HTTP_HOST'] . '>'; if (count($this->headers)) { foreach($this->headers as $key => $value) { $header .= $key . ': ' . $value . "\n"; } } // pour eviter des bug on enleve tout les retours à la ligne et n les remetes .... $dest = str_replace("/\r\n?/", "", $this->destinataire['to']); $sujet = str_replace("/\r\n?/", "", $this->sujet); if ($this->not_use_tpl) { // evite quelque bug et double retour à la ligne.... if(!$this->type_mail) { $msg = str_replace("/\r\n?/", "\n", $this->message); if (isset($this->signature)) { $msg = $msg . "\n\n--\n" . $this->signature; } $msg = str_replace("\r\n", "\n", $msg); $msg = str_replace("\n", "\r\n", $msg); } else { $msg = nl2br($this->message); if ( isset($this->signature) ) { $msg = $msg . '


' . $this->signature; } } } else { if ($this->type_mail) { $msg = nl2br($this->message); } else { $msq = $this->message; $msg = str_replace("\r\n", "\n", $msg); $msg = str_replace("\n", "\r\n", $msg); } } $header = str_replace("\r\n", "\n", $header); $header = str_replace("\n\n", "\r\n", $header); // on utilise sendmail ou smtp if($sendmail) { $this->Mail_SMTP('', $this->expediteur['from']); } return (@mail($dest, $sujet, $msg, $header)); } /** * remet le tout à 0 */ function reset_vars() { $this->destinataire = array('to' => '', 'cc' => array(), 'bcc' => array()); $this->expediteur = array('from' => '', 'reply-to' => ''); $this->headers = array(); $this->sujet = ''; $this->message = ''; $this->signature = ''; // encodage par défaut de la taille du texte $this->encodage_mail('8bit'); // par defaut type html $this->type_mime_mail('text/html; charset="' . $this->charset . '"'); $this->set_langue('fr/'); $this->not_use_tpl = TRUE; } /** * Initialise les variables système pour l'utilisation du smtp * * @param string $smtp Sous Windows seulement : adresse DNS ou adresse IP du SMTP que PHP doit utiliser pour envoyer un mail avec la fonction mail * @param string $from Sous Windows seulement : valeur du champ "From:" qui doit être utilisée lors de l'envoi de mail. * @param int $port Sous Windows seulement : numéro de port à utiliser pour se connecter au serveur SMTP lors de l'envoi de mail avec la fonction mail ; Uniquement disponible depuis PHP 4.3.0. */ function Mail_SMTP($smtp = '', $from = '', $port = 25) { if ($smtp == '') { $smtp = $GLOBALS['config']['smtp_smtp']; $port = $GLOBALS['config']['smtp_port']; } @ini_set("sendmail_from", $from); @ini_set("smtp_port", $port); @ini_set("SMTP", $smtp); } } ?>