*/
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 . '