Accueil > > > CLASS MAIL GESTION COMPLÈTE
CLASS MAIL GESTION COMPLÈTE
Information sur la source
Description
Bonjour, Voici une petite class Mail que j'ai codé. Elle permet l'envoi de mail texte et/ou html, avec pièces jointes. Destinataires, copies conformes, copies cachées et attachements multiples. Méthode permettant de voir les paramètres d'envoi, et une méthode de vérification de mail. Par defaut l'envoi se fait en mode texte, meme si votre message est en html il sera automatique converti pour l'envoi en texte avec une supression des balises html. Pour ce qui concerne l'utilisation, et les options regarder plus bas ;) Edit: Ajout de la commande supplémentaire. Modification de la gestions des erreurs. Edit2: Mise en place d'un journal d'erreur. verifMail passe en static on peut donc l'utiliser sans instancier la class. Grande nouveauté mise en place d'un système antispam, autrement dit vous ne pouvez mettre qu'une seule fois la meme adresse dans destinataire, et dans les copies. Edit3: Possibilité de mettre des pieces jointes directement dans le html. Pour cela code html normal. Par exemple pour mettre une image <img src="image.gif" /> et votre image sera automatique jointe... Toutes les pices jointes html ou non, doivent evidemment se trouver sur le serveur pour etre envoyé. Laissez vos commentaires, j'espère que ca vous plaira ;)
Source
- <?php
- /************ Class Mail V2.5 by Benjy ************/
-
- class Mail {
- protected $destinataire;
- protected $sujet;
- protected $message;
- protected $attachement;
- protected $attachementhtml;
- protected $expediteur;
- protected $copieconforme;
- protected $copiecachee;
- protected $boundary;
- protected $priority;
- protected $sendmail_path;
- protected $errolog;
-
- /************ Methodes propre a la class Mail ************/
-
- function __construct() {
- $this->destinataire = array();
- $this->sujet = '';
- $this->message = '';
- $this->boundary = "_" . md5(uniqid(rand()));
- $this->attachement = array();
- $this->attachementhtml = '';
- $this->expediteur = '';
- $this->copieconforme = array();
- $this->copiecachee = array();
- $this->priority = 3;
- $this->sendmail_path = '';
- $this->errolog = '';
- }
-
- function __destruct() {
- }
-
- protected function BodyLineWrap($Value) {
- return wordwrap($Value, 78, "\n ");
- }
-
- protected function constructheader($type) {
- $entete = "Date: ". date('r') ."\n";
- $entete .= "MIME-Version: 1.0\n";
-
- $entete .= "X-Sender: $this->expediteur\n";
- $entete .= "X-Mailer: PHP\n";
- $entete .= "X-auth-smtp-user: webmaster@votresite.com \n";
- $entete .= "X-abuse-contact: abuse@votresite.com \n";
- $entete .= "X-Priority: $this->priority \n";
-
- $entete .= "Disposition-Notification-To: $this->expediteur\n";
- $entete .= "X-Confirm-Reading-To: $this->expediteur\n";
- $entete .= "Return-receipt-to: $this->expediteur\n";
- $entete .= "Errors-To: $this->expediteur\n";
- $entete .= "From: $this->expediteur\n";
- $entete .= "Reply-to: $this->expediteur\n";
- $entete .= "Return-Path: $this->expediteur\n";
-
- if(!empty($this->copieconforme))
- $entete .= "Cc: " . implode(',', $this->copieconforme) . "\n";
- if(!empty($this->copiecachee))
- $entete .= "Bcc: " . implode(',', $this->copiecachee) . "\n";
-
- if($type == 'texte' && empty($this->attachement))
- $entete .= "Content-Type: text/plain;\nContent-Transfer-Encoding: 8bit";
- elseif($type == 'html' && empty($this->attachement) && empty($this->attachementhtml)) {
- $entete .= "Content-Type: text/html; charset=\"iso-8859-1\"; format=flowed\n";
- $entete .= "Content-Transfer-Encoding: quoted-printable";
- }
- else {
- if(empty($this->attachementhtml))
- $entete .= "Content-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n";
- else
- $entete .= "Content-Type: multipart/related;\n boundary=\"$this->boundary\"\n";
- }
-
- return $entete;
- }
-
- protected function constructbody($type) {
- if(!empty($this->message)) {
- $body = '';
- $message = $this->message;
-
- if($type == 'texte' || $type == 'tout') {
- if(empty($this->attachement) && $type == 'texte')
- $body .= strip_tags($message);
- else {
- $body .= "This is a multi-part message in MIME format.\n";
- $body .= "--$this->boundary\n";
-
- $body .= "Content-Type: text/plain;\nContent-Transfer-Encoding: 8bit\n\n";
- $body .= $this->BodyLineWrap(strip_tags($message));
- $body .= "\n--$this->boundary\n";
- }
- }
-
- if($type == 'html' || $type == 'tout') {
- if(empty($this->attachement) && empty($this->attachementhtml) && $type == 'html') {
- $message = nl2br(html_entity_decode(stripslashes($message)));
- $body .= $message;
- }
- else {
- $body .= "This is a multi-part message in MIME format.\n";
- $body .= "--$this->boundary\n";
-
- $body .= "Content-Type: text/html; charset=\"iso-8859-1\"; format=flowed\n";
- $body .= "Content-Transfer-Encoding: 8bit\n\n";
- $message = nl2br(html_entity_decode(stripslashes($message)));
- $body .= $message;
- $body .= "\n--$this->boundary\n";
-
- if(!empty($this->attachementhtml))
- $body .= $this->attachementhtml;
- }
- }
-
- foreach($this->attachement as $attach) {
- $body .= "Content-Type: application/octetstream;\n name=\"".$attach."\"\n";
- $body .= "Content-Transfer-Encoding: base64\n";
- $body .= "Content-Disposition: attachment;\n filename=\"".$attach."\"\n\n";
- $body .= chunk_split(base64_encode(file_get_contents($attach)))."\n\n";
- $body .= "\n--$this->boundary\n";
- }
-
- return $body;
- }
- }
-
- protected function htmlattachement() {
- $erreur = '';
- preg_match_all('`\<[\w]+ src="([\w.]+)" [\</\w]+\>`im', $this->message, $out);
- $file[0] = array();
- foreach($out[1] as $name) {
- if(file_exists($name)) {
- if(!in_array($name,$file[0])) {
- $ID = md5( uniqid ( rand() ) ).$_SERVER['SERVER_NAME'];
- $file[0][$name] = $ID;
- $file[1][$name] = '`(\<[\w]+ )src="' . $name . '"( [\</\w]+\>)`';
- $file[2][$name] = '$1src="cid:'.$ID.'"$2';
- }
- }
- else {
- $erreur .= 'Erreur, fichier '. $name .' pour l\'attachement inexistant<br />';
- }
- }
- $this->message = preg_replace($file[1],$file[2], $this->message);
- foreach($file[0] as $name => $ID) {
- $this->attachementhtml .= "Content-Type: ".mime_content_type($name)."; name=\"$name\"\n";
- $this->attachementhtml .= "Content-Transfer-Encoding: base64\n";
- $this->attachementhtml .= "Content-ID: <$ID>\n\n";
- $this->attachementhtml .= chunk_split(base64_encode(file_get_contents($name)))."\n\n";
- $this->attachementhtml .= "\n--$this->boundary\n";
- }
- if(empty($erreur))
- return TRUE;
- else {
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
-
- /************ Methodes utilisateur ************/
-
- function addDestinataire() {
- $erreur = '';
- if(func_num_args() == 0)
- $erreur .= 'Erreur, vous devez specifiez un destinataire<br />';
- else {
- $arg = func_get_args();
- foreach($arg as $dest) {
- if(!in_array($dest, $this->destinataire) && !in_array($dest, $this->copieconforme) && !in_array($dest, $this->copiecachee)) {
- if($res = $this->verifMail($dest, TRUE)) {
- array_push($this->destinataire, $res);
- }
- else
- $erreur .= 'Erreur, destinataire "'. $dest .'" incorrect<br />';
- }
- else
- $erreur .= 'Erreur, destinataire "'. $dest .'" deja presente<br />';
- }
- }
- if(empty($erreur))
- return TRUE;
- else {
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
-
- function defSujet($subject) {
- if(!empty($subject) && is_string($subject)) {
- $this->sujet = nl2br(html_entity_decode(stripslashes($subject)));
- return TRUE;
- }
- else
- $this->errolog .= 'Erreur, sujet '. $subject .' incorrect<br />';
- }
-
- function addAttach() {
- $erreur = '';
- if(func_num_args() == 0)
- $erreur .= 'Erreur, vous devez specifiez un fichier<br />';
- else {
- $arg = func_get_args();
- foreach($arg as $attch) {
- if(!in_array($dest, $this->attachement) && is_string($attch) && file_exists($attch))
- array_push($this->attachement, $attch);
- else
- $erreur .= 'Erreur, fichier '. $attch .' pour l\'attachement incorrect ou inexistant<br />';
- }
- }
- if(empty($erreur))
- return TRUE;
- else {
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
-
- function addCc() {
- $erreur = '';
- if(func_num_args() == 0)
- $erreur .= 'Erreur, vous devez specifiez une adresse pour la copie conforme<br />';
- else {
- $arg = func_get_args();
- foreach($arg as $cc) {
- if(!in_array($dest, $this->destinataire) && !in_array($dest, $this->copieconforme) && !in_array($dest, $this->copiecachee)) {
- if($res = $this->verifMail($cc, TRUE)) {
- array_push($this->copieconforme, $res);
- }
- else
- $erreur .= 'Erreur, adresse "'. $cc .'" pour la copie conforme incorrect<br />';
- }
- else
- $erreur .= 'Erreur, adresse "'. $cc .'" pour la copie conforme deja presente<br />';
- }
- }
- if(empty($erreur))
- return TRUE;
- else {
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
-
- function addBcc() {
- $erreur = '';
- if(func_num_args() == 0)
- $erreur .= 'Erreur, vous devez specifiez une adresse pour la copie cachee<br />';
- else {
- $arg = func_get_args();
- foreach($arg as $bcc) {
- if(!in_array($dest, $this->destinataire) && !in_array($dest, $this->copieconforme) && !in_array($dest, $this->copiecachee)) {
- if($res = $this->verifMail($bcc, TRUE)) {
- array_push($this->copiecachee, $res);
- }
- else
- $erreur .= 'Erreur, adresse "'. $bcc .'" pour la copie cachee incorrect<br />';
- }
- else
- $erreur .= 'Erreur, adresse "'. $bcc .'" pour la copie cachee deja presente<br />';
- }
- }
- if(empty($erreur))
- return TRUE;
- else {
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
-
- function defMessage($mess) {
- if(!empty($mess) && is_string($mess)) {
- $this->message = $mess;
- return TRUE;
- }
- else {
- $this->errolog .= 'Erreur, message '. $mess .' incorrect<br />';
- return FALSE;
- }
- }
-
- function defExpediteur($exp) {
- if($exp = $this->verifMail($exp, TRUE)) {
- $this->expediteur = $exp;
- return TRUE;
- }
- else {
- $this->errolog .= 'Erreur, expediteur "'. $exp .'" incorrect<br />';
- return FALSE;
- }
- }
-
- function defPriority($prio) {
- if(!empty($prio) && is_string($prio)) {
- switch($prio) {
- case 'urgent':
- $this->priority = 1;
- break;
-
- case 'normal':
- $this->priority = 3;
- break;
-
- case 'bas':
- $this->priority = 5;
- break;
- }
- return TRUE;
- }
- else {
- $this->errolog .= 'Erreur, priorite "'. $prio .'" incorrect<br />';
- return FALSE;
- }
- }
-
- function defSendmailpath($sendpath) {
- if(!empty($sendpath) && is_string($sendpath)) {
- $this->sendmail_path = $sendpath;
- return TRUE;
- }
- else {
- $this->errolog .= 'Erreur, parametre '. $sendpath .' incorrect<br />';
- return FALSE;
- }
- }
-
- function getInfo() {
- echo '<u>Destinataire(s):</u> ' . htmlspecialchars(implode(',', $this->destinataire)) . '<br />';
- echo '<u>Sujet:</u> ' . $this->sujet . '<br />';
- echo '<u>Message:</u><br />' . $this->message . '<br />';
- echo '<u>Expediteur:</u> ' . htmlspecialchars($this->expediteur) . '<br />';
- if(!empty($this->copieconforme))
- echo '<u>Copie(s) conforme(s):</u> ' . htmlspecialchars(implode(',', $this->copieconforme)) . '<br />';
- if(!empty($this->copiecachee))
- echo '<u>Copie(s) cachee(s):</u> ' . htmlspecialchars(implode(',', $this->copiecachee)) . '<br />';
- if(!empty($this->attachement))
- echo '<u>Piece(s) jointe(s):</u> ' . implode(',', $this->attachement) . '<br />';
- if(!empty($this->sendmail_path))
- echo '<u>Commande:</u> ' . $this->sendmail_path . '<br />';
- }
-
- function getErrorlog() {
- return $this->errolog;
- }
-
- static function verifMail($mail, $fct = NULL) {
- if(preg_match('`^(\w(?:[-_. ]?\w)* )?((\w(?:[-_.]?\w)*)@\w(?:[-_.]?\w)*\.(?:[a-z]{2,4}))$`', $mail, $out)) {
- if($fct) {
- $nom = empty($out[1]) ? $out[3] : $out[1];
- return ($nom.'<'.$out[2].'>');
- }
- else
- return TRUE;
- }
- else
- return FALSE;
- }
-
- function envoi($type = 'texte') {
- $erreur = '';
- if(empty($this->destinataire))
- $erreur .= 'Erreur, vous devez definir au moins un destinataire!';
- elseif(empty($this->expediteur))
- $erreur .= 'Erreur, vous devez definir un expediteur!';
- elseif(empty($this->sujet))
- $erreur .= 'Erreur, vous devez definir un sujet!';
- elseif(empty($this->message))
- $erreur .= 'Erreur, vous devez definir un message!';
- elseif(!$this->htmlattachement())
- $erreur .= 'Erreur lors de l\'attachement des fichiers present dans le message html!';
- else {
- if(empty($erreur)) {
- if(empty($this->sendmail_path))
- if(mail(implode(',', $this->destinataire), $this->sujet, $this->constructbody($type), $this->constructheader($type)))
- return TRUE;
- else {
- $erreur .= 'Erreur, mail non envoye<br />';
- $this->errolog .= $erreur;
- return FALSE;
- }
- else
- if(mail(implode(',', $this->destinataire), $this->sujet, $this->constructbody($type), $this->constructheader($type), $this->sendmail_path))
- return TRUE;
- else {
- $erreur .= 'Erreur, mail non envoye<br />';
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
- else {
- $this->errolog .= $erreur;
- return FALSE;
- }
- }
- }
-
- }
- ?>
<?php
/************ Class Mail V2.5 by Benjy ************/
class Mail {
protected $destinataire;
protected $sujet;
protected $message;
protected $attachement;
protected $attachementhtml;
protected $expediteur;
protected $copieconforme;
protected $copiecachee;
protected $boundary;
protected $priority;
protected $sendmail_path;
protected $errolog;
/************ Methodes propre a la class Mail ************/
function __construct() {
$this->destinataire = array();
$this->sujet = '';
$this->message = '';
$this->boundary = "_" . md5(uniqid(rand()));
$this->attachement = array();
$this->attachementhtml = '';
$this->expediteur = '';
$this->copieconforme = array();
$this->copiecachee = array();
$this->priority = 3;
$this->sendmail_path = '';
$this->errolog = '';
}
function __destruct() {
}
protected function BodyLineWrap($Value) {
return wordwrap($Value, 78, "\n ");
}
protected function constructheader($type) {
$entete = "Date: ". date('r') ."\n";
$entete .= "MIME-Version: 1.0\n";
$entete .= "X-Sender: $this->expediteur\n";
$entete .= "X-Mailer: PHP\n";
$entete .= "X-auth-smtp-user: webmaster@votresite.com \n";
$entete .= "X-abuse-contact: abuse@votresite.com \n";
$entete .= "X-Priority: $this->priority \n";
$entete .= "Disposition-Notification-To: $this->expediteur\n";
$entete .= "X-Confirm-Reading-To: $this->expediteur\n";
$entete .= "Return-receipt-to: $this->expediteur\n";
$entete .= "Errors-To: $this->expediteur\n";
$entete .= "From: $this->expediteur\n";
$entete .= "Reply-to: $this->expediteur\n";
$entete .= "Return-Path: $this->expediteur\n";
if(!empty($this->copieconforme))
$entete .= "Cc: " . implode(',', $this->copieconforme) . "\n";
if(!empty($this->copiecachee))
$entete .= "Bcc: " . implode(',', $this->copiecachee) . "\n";
if($type == 'texte' && empty($this->attachement))
$entete .= "Content-Type: text/plain;\nContent-Transfer-Encoding: 8bit";
elseif($type == 'html' && empty($this->attachement) && empty($this->attachementhtml)) {
$entete .= "Content-Type: text/html; charset=\"iso-8859-1\"; format=flowed\n";
$entete .= "Content-Transfer-Encoding: quoted-printable";
}
else {
if(empty($this->attachementhtml))
$entete .= "Content-Type: multipart/mixed;\n boundary=\"$this->boundary\"\n";
else
$entete .= "Content-Type: multipart/related;\n boundary=\"$this->boundary\"\n";
}
return $entete;
}
protected function constructbody($type) {
if(!empty($this->message)) {
$body = '';
$message = $this->message;
if($type == 'texte' || $type == 'tout') {
if(empty($this->attachement) && $type == 'texte')
$body .= strip_tags($message);
else {
$body .= "This is a multi-part message in MIME format.\n";
$body .= "--$this->boundary\n";
$body .= "Content-Type: text/plain;\nContent-Transfer-Encoding: 8bit\n\n";
$body .= $this->BodyLineWrap(strip_tags($message));
$body .= "\n--$this->boundary\n";
}
}
if($type == 'html' || $type == 'tout') {
if(empty($this->attachement) && empty($this->attachementhtml) && $type == 'html') {
$message = nl2br(html_entity_decode(stripslashes($message)));
$body .= $message;
}
else {
$body .= "This is a multi-part message in MIME format.\n";
$body .= "--$this->boundary\n";
$body .= "Content-Type: text/html; charset=\"iso-8859-1\"; format=flowed\n";
$body .= "Content-Transfer-Encoding: 8bit\n\n";
$message = nl2br(html_entity_decode(stripslashes($message)));
$body .= $message;
$body .= "\n--$this->boundary\n";
if(!empty($this->attachementhtml))
$body .= $this->attachementhtml;
}
}
foreach($this->attachement as $attach) {
$body .= "Content-Type: application/octetstream;\n name=\"".$attach."\"\n";
$body .= "Content-Transfer-Encoding: base64\n";
$body .= "Content-Disposition: attachment;\n filename=\"".$attach."\"\n\n";
$body .= chunk_split(base64_encode(file_get_contents($attach)))."\n\n";
$body .= "\n--$this->boundary\n";
}
return $body;
}
}
protected function htmlattachement() {
$erreur = '';
preg_match_all('`\<[\w]+ src="([\w.]+)" [\</\w]+\>`im', $this->message, $out);
$file[0] = array();
foreach($out[1] as $name) {
if(file_exists($name)) {
if(!in_array($name,$file[0])) {
$ID = md5( uniqid ( rand() ) ).$_SERVER['SERVER_NAME'];
$file[0][$name] = $ID;
$file[1][$name] = '`(\<[\w]+ )src="' . $name . '"( [\</\w]+\>)`';
$file[2][$name] = '$1src="cid:'.$ID.'"$2';
}
}
else {
$erreur .= 'Erreur, fichier '. $name .' pour l\'attachement inexistant<br />';
}
}
$this->message = preg_replace($file[1],$file[2], $this->message);
foreach($file[0] as $name => $ID) {
$this->attachementhtml .= "Content-Type: ".mime_content_type($name)."; name=\"$name\"\n";
$this->attachementhtml .= "Content-Transfer-Encoding: base64\n";
$this->attachementhtml .= "Content-ID: <$ID>\n\n";
$this->attachementhtml .= chunk_split(base64_encode(file_get_contents($name)))."\n\n";
$this->attachementhtml .= "\n--$this->boundary\n";
}
if(empty($erreur))
return TRUE;
else {
$this->errolog .= $erreur;
return FALSE;
}
}
/************ Methodes utilisateur ************/
function addDestinataire() {
$erreur = '';
if(func_num_args() == 0)
$erreur .= 'Erreur, vous devez specifiez un destinataire<br />';
else {
$arg = func_get_args();
foreach($arg as $dest) {
if(!in_array($dest, $this->destinataire) && !in_array($dest, $this->copieconforme) && !in_array($dest, $this->copiecachee)) {
if($res = $this->verifMail($dest, TRUE)) {
array_push($this->destinataire, $res);
}
else
$erreur .= 'Erreur, destinataire "'. $dest .'" incorrect<br />';
}
else
$erreur .= 'Erreur, destinataire "'. $dest .'" deja presente<br />';
}
}
if(empty($erreur))
return TRUE;
else {
$this->errolog .= $erreur;
return FALSE;
}
}
function defSujet($subject) {
if(!empty($subject) && is_string($subject)) {
$this->sujet = nl2br(html_entity_decode(stripslashes($subject)));
return TRUE;
}
else
$this->errolog .= 'Erreur, sujet '. $subject .' incorrect<br />';
}
function addAttach() {
$erreur = '';
if(func_num_args() == 0)
$erreur .= 'Erreur, vous devez specifiez un fichier<br />';
else {
$arg = func_get_args();
foreach($arg as $attch) {
if(!in_array($dest, $this->attachement) && is_string($attch) && file_exists($attch))
array_push($this->attachement, $attch);
else
$erreur .= 'Erreur, fichier '. $attch .' pour l\'attachement incorrect ou inexistant<br />';
}
}
if(empty($erreur))
return TRUE;
else {
$this->errolog .= $erreur;
return FALSE;
}
}
function addCc() {
$erreur = '';
if(func_num_args() == 0)
$erreur .= 'Erreur, vous devez specifiez une adresse pour la copie conforme<br />';
else {
$arg = func_get_args();
foreach($arg as $cc) {
if(!in_array($dest, $this->destinataire) && !in_array($dest, $this->copieconforme) && !in_array($dest, $this->copiecachee)) {
if($res = $this->verifMail($cc, TRUE)) {
array_push($this->copieconforme, $res);
}
else
$erreur .= 'Erreur, adresse "'. $cc .'" pour la copie conforme incorrect<br />';
}
else
$erreur .= 'Erreur, adresse "'. $cc .'" pour la copie conforme deja presente<br />';
}
}
if(empty($erreur))
return TRUE;
else {
$this->errolog .= $erreur;
return FALSE;
}
}
function addBcc() {
$erreur = '';
if(func_num_args() == 0)
$erreur .= 'Erreur, vous devez specifiez une adresse pour la copie cachee<br />';
else {
$arg = func_get_args();
foreach($arg as $bcc) {
if(!in_array($dest, $this->destinataire) && !in_array($dest, $this->copieconforme) && !in_array($dest, $this->copiecachee)) {
if($res = $this->verifMail($bcc, TRUE)) {
array_push($this->copiecachee, $res);
}
else
$erreur .= 'Erreur, adresse "'. $bcc .'" pour la copie cachee incorrect<br />';
}
else
$erreur .= 'Erreur, adresse "'. $bcc .'" pour la copie cachee deja presente<br />';
}
}
if(empty($erreur))
return TRUE;
else {
$this->errolog .= $erreur;
return FALSE;
}
}
function defMessage($mess) {
if(!empty($mess) && is_string($mess)) {
$this->message = $mess;
return TRUE;
}
else {
$this->errolog .= 'Erreur, message '. $mess .' incorrect<br />';
return FALSE;
}
}
function defExpediteur($exp) {
if($exp = $this->verifMail($exp, TRUE)) {
$this->expediteur = $exp;
return TRUE;
}
else {
$this->errolog .= 'Erreur, expediteur "'. $exp .'" incorrect<br />';
return FALSE;
}
}
function defPriority($prio) {
if(!empty($prio) && is_string($prio)) {
switch($prio) {
case 'urgent':
$this->priority = 1;
break;
case 'normal':
$this->priority = 3;
break;
case 'bas':
$this->priority = 5;
break;
}
return TRUE;
}
else {
$this->errolog .= 'Erreur, priorite "'. $prio .'" incorrect<br />';
return FALSE;
}
}
function defSendmailpath($sendpath) {
if(!empty($sendpath) && is_string($sendpath)) {
$this->sendmail_path = $sendpath;
return TRUE;
}
else {
$this->errolog .= 'Erreur, parametre '. $sendpath .' incorrect<br />';
return FALSE;
}
}
function getInfo() {
echo '<u>Destinataire(s):</u> ' . htmlspecialchars(implode(',', $this->destinataire)) . '<br />';
echo '<u>Sujet:</u> ' . $this->sujet . '<br />';
echo '<u>Message:</u><br />' . $this->message . '<br />';
echo '<u>Expediteur:</u> ' . htmlspecialchars($this->expediteur) . '<br />';
if(!empty($this->copieconforme))
echo '<u>Copie(s) conforme(s):</u> ' . htmlspecialchars(implode(',', $this->copieconforme)) . '<br />';
if(!empty($this->copiecachee))
echo '<u>Copie(s) cachee(s):</u> ' . htmlspecialchars(implode(',', $this->copiecachee)) . '<br />';
if(!empty($this->attachement))
echo '<u>Piece(s) jointe(s):</u> ' . implode(',', $this->attachement) . '<br />';
if(!empty($this->sendmail_path))
echo '<u>Commande:</u> ' . $this->sendmail_path . '<br />';
}
function getErrorlog() {
return $this->errolog;
}
static function verifMail($mail, $fct = NULL) {
if(preg_match('`^(\w(?:[-_. ]?\w)* )?((\w(?:[-_.]?\w)*)@\w(?:[-_.]?\w)*\.(?:[a-z]{2,4}))$`', $mail, $out)) {
if($fct) {
$nom = empty($out[1]) ? $out[3] : $out[1];
return ($nom.'<'.$out[2].'>');
}
else
return TRUE;
}
else
return FALSE;
}
function envoi($type = 'texte') {
$erreur = '';
if(empty($this->destinataire))
$erreur .= 'Erreur, vous devez definir au moins un destinataire!';
elseif(empty($this->expediteur))
$erreur .= 'Erreur, vous devez definir un expediteur!';
elseif(empty($this->sujet))
$erreur .= 'Erreur, vous devez definir un sujet!';
elseif(empty($this->message))
$erreur .= 'Erreur, vous devez definir un message!';
elseif(!$this->htmlattachement())
$erreur .= 'Erreur lors de l\'attachement des fichiers present dans le message html!';
else {
if(empty($erreur)) {
if(empty($this->sendmail_path))
if(mail(implode(',', $this->destinataire), $this->sujet, $this->constructbody($type), $this->constructheader($type)))
return TRUE;
else {
$erreur .= 'Erreur, mail non envoye<br />';
$this->errolog .= $erreur;
return FALSE;
}
else
if(mail(implode(',', $this->destinataire), $this->sujet, $this->constructbody($type), $this->constructheader($type), $this->sendmail_path))
return TRUE;
else {
$erreur .= 'Erreur, mail non envoye<br />';
$this->errolog .= $erreur;
return FALSE;
}
}
else {
$this->errolog .= $erreur;
return FALSE;
}
}
}
}
?>
Conclusion
Pour envoyer un mail c'est simple:
Obligatoire: $mail = new Mail(); $mail->addDestinataire('nom mail@domaine.fr'); $mail->defSujet('Bonjour ceci est le sujet'); $mail->defMessage('<b>Bonjour</b>, ceci est un test de ma classe mail :D'); $mail->defExpediteur('nom mail@domaine.fr'); //Par defaut envoi en texte $mail->envoi();
Options: //Piece jointe $mail->addAttach('attach.txt'); //Copie conforme $mail->addCc('nom mail@domaine.fr'); //Copie cachée $mail->addBcc('nom mail@domaine.fr'); //Afficher les parametres d'envoi $mail->getInfo(); //Envoi en html $mail->envoi('html'); //Envoi en texte + html $mail->envoi('tout');
Edit: La classe possède aussi une methode interne de vérification d'une adresse mail a utiliser comme ceci: if($mail->verifMail('adress@domaine.com')) echo 'Adresse correct'; Elle verifie les adresses "adresse@domaine.com" et "nom adresse@domaine.com"
Pour l'ajout des destinaire, des pieces jointes, des copies conforme et caché, vous avez deux possibilitées: Soit normalement un par un $mail->methode('truc a ajouter'); Ou alors plusieurs a la fois: $mail->methode('truc a ajouter', 'truc 2 a ajouter', 'truc 3 a ajouter' ...);
Precision: pour les destinataires, les copies, l'expediteur... Bref a chaque fois quoi vous avez a mettre une adresse mail, deux possibilités encore: Soit classique: adresse@domaine.fr Soit avec un alias: alias adresse@domaine.fr
Edit2: Ajout de la commande supplémentaire $mail->defSendmailpath('commande');
Edit3: Mise en place d'une journal d'erreur. Désormais les méthodes retourne True si pas de probleme False sinon. Et pour consulter le journal d'erreur nouvelle méthode $mail->getErrorlog();
Edit4: Pieces jointes html automatique.
La methode verifMail passe en static on peut donc l'utilise sans instance de la classe comme ceci: Mail::verifMail('adresse@domaine.fr');
Aucun bug connu, n'hésitez pas a les signalés.
Historique
- 27 mai 2007 00:02:54 :
- Mise a jour de la description
- 27 mai 2007 00:06:42 :
- 2ieme mise a jour de la description (tete en l'air ce soir :D)
- 27 mai 2007 00:12:17 :
- Toujours mise a jour :D
- 27 mai 2007 11:33:19 :
- Edit de l'utilisation
- 28 mai 2007 10:11:40 :
- Ajout de la commande supplémentaire
- 28 mai 2007 10:47:40 :
- Gestions des erreurs modifiées ;)
- 28 mai 2007 11:20:34 :
- Evolution de la méthode verifMail
- 28 mai 2007 15:25:10 :
- Mise en place d'un journal d'erreur, verifMail passe en static, et mise en place d'un systeme antispam.
- 28 mai 2007 23:58:38 :
- Soucis dans verifMail
- 29 mai 2007 00:58:37 :
- Petite correction
- 29 mai 2007 01:52:35 :
- Mise a jour du zip pour la version 2.5.
Ajout de pieces jointes html automatique.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Problème de compatibilité de script [ par Chris54 ]
Bonjour,J'ai un problème d'execution d'un script javascript sous netscape alors qu'il fonctionne parfaitement sous IE mais je ne sais pas pourquoi.Que
formulaire pour e-mail invisible [ par pyranhaz ]
Bonjour,Je cherche à élaborer un formulaire php afin que les clients de mes petites annonces puissent envoyer leur réponse sans connaître le e-mail du
Capter l'email une fois lu. [ par zzzzzz ]
Salutj'aimerai savoir si il y a un moyen de "capter" l'email d'un destinataire. Si par exemple j'envoie un mail à bidon@hotmail.comj'aimerai appellé u
envoie d'Email :Je dois avoir de la merde dans les yeux [ par Wam0106 ]
Voila chez Online.net il me dise qu'il y a une erreure a la ligne 3 mais je ne vois pas ou est le pb si qq'un peu me dire ce qui ne va pas:<? $head
Envoyer bcp de email avec mail() [ par ImmortalPC ]
Salut, Je me pose à un gros problème sur un de mes scripts, envoyer beaucoup d'email ( environs 20 000 ). Le problème c'est le time ou
Expediteur dans fonction Mail() [ par Bowlest ]
Bonjour,J'ai un mini problème: en fait ma fonction mail marche trés bien, mais lorsque je reçois le mail, son expéditeur est "Apac
fonction mail ? [ par badjouane ]
comment puis evité le "/" qui jalone les mail que j'envoi à partir de la section administration de mon site.Par exemple, si j'écri :Mes c'est quoi ce
Mail et formulaire [ par Jackboy ]
J'aimerai créer un formulaire, assez complexe (pas seulement email, nom, message,...) et j'aimerai avoir ce formulaire envoyer dans un email et format
aidez moi pb avec email !! [ par anisbs ]
Salut je suis débutant en phpje commence a essayer quelques trucs mais la fonction mail ne fonctionne pas Il me sort un truc comme :Warning: mail():
fonction mail bizarre [ par pouda ]
Salut a tousvoila je voudrai faire une mailing liste a partir d'une table nuked klan dans ma base cependant ma fonction mail deconnevoila le codegloba
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Forum
GOOGLE MAPGOOGLE MAP par fatmanajjar
Cliquez pour lire la suite par fatmanajjar
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|