Classe mail

Contenu du snippet

Une petite classe Mail qui facilite et permet d'utiliser la POO pour envoyer un mail.
C'est ma première classe et je la poste pour que vous me disiez si elle est bien construite et/ou s'il y a des améliorations à faire.

Source / Exemple :


<?php

/* 
	Classe pour envoyer des mails
	--------------------------------------------
	v1.0 : - création du projet, début de l'écriture de la classe
	v1.1 : - mis en place de l'adresse mail par défaut si il n'y en a pas dans le constructeur
		   - début de la réflèxion pour l'envoi multiple du mail en passant par un tableau d'adresse mail
		   - réécriture du constructeur pour enlever une condition
	v1.2 : - mise en place de la méthode sendMails() pour envoyer plusieurs mails avec les adresses dans un tableau.
			Reste la mise en place de la gestion de la sécurité des adresses mails du tableau et de la gestion du saut de ligne en fonction de l'adresse mail
	à venir :
	v2.0 : - gestion d'un tableau d'adresses mails pour envoyer plusieurs fois le même mail

  • /
class Mail { protected $_error; protected $_mail; protected $_mailArray; protected $_boundary; protected $_passageLigne; protected $_subject; protected $_message; protected $_header = null; protected $_getMailInArray = false; ##### CONSTRUCTEUR & DESTRUCTEUR ##### public function __construct($mail = null) { if (is_null($mail)) { // Mail par défaut défini dans le fichier de configuration $this->_mail = MAIL; } else { if (is_array($mail)) { $this->_getMailInArray = true; $this->_mailArray = $mail; } else { // Vérification de l'adresse mail self::verificationMail($mail); // Création du retour à la ligne self::createLineJump($mail); } } // Création de la boundary $this->_boundary = "-----=".md5(rand()); } public function __destruct() { } ##### SETTER ##### /* -- Gestion des erreurs SETTER -- */ public function __set($nom, $valeur) { $this->_error[] = 'Impossible d\'assigner à l\'attribut <strong>'.$nom.'</strong> la valeur <strong>'.$valeur.'</strong> !<br />'; } /* -- Si aucun header n'est défini, la méthode setDefaultHeader() en crée un -- */ private function setDefaultHeader() { $this->_header = 'From: "Lycée Victor Hugo"<'.$this->_mail.'>'.$this->_passageLigne; $this->_header.= 'Reply-to: "Lycée Victor Hugo" <'.$this->_mail.'>'.$this->_passageLigne; $this->_header.= 'MIME-Version: 1.0'.$this->_passageLigne; $this->_header.= 'Content-Type: multipart/alternative;'.$this->_passageLigne.' boundary="'.$this->_boundary.'"'.$this->_passageLigne; } /* -- Ajoute l'header au message -- */ public function setHeader($header) { $this->_header = $header; } /* -- Ajoute le sujet au message -- */ public function setSubject($subject) { $this->_subject = $subject; } /* -- Ajoute le contenu au message -- */ public function setMessage($message) { $this->_message = $message; } /* -- Permet dans une seule méthode de passer tous les paramètres pour envoyer le mail -- */ public function setAll($subject, $message, $header = null, $mail = null) { if (!is_null($mail)) self::changeMail($mail); self::setHeader($header); self::setSubject($subject); self::setMessage($message); } ##### GETTER ##### /* -- Gestion des erreurs GETTER -- */ public function __get($nom) { $this->_error[] = 'Impossible d\'accéder à l\'attribut <strong>'.$nom.'</strong> !<br />'; } /* -- Méthode qui retourne les erreurs sous forme de tableau. De moins en moins utilisé car utilisation des exceptions -- */ public function getError() { return $this->_error; } ##### AUTRES METHODES ##### /* -- Méthode qui permet d'envoyer le mail. Si aucun header n'est défini elle utilise setDefaultHeader() pour en créer un -- */ public function sendMail() { if (!$_getMailInArray) { if (is_null($this->_header)) self::setDefaultHeader(); if (!mail($this->_mail, $this->_sujet, $this->_message, $this->_header)) throw new exception('Le mail n\'a pas pu être envoyé'); } else throw new exception('Ce n\'est pas cette méthode qu\'il faut utiliser. Pour envoyer l\'e-mail aux adresses du tableau vous devez utiliser la méthode sendMail<b>s</b>() !'); } /* -- Méthode qui permet d'envoyer le mail à toutes les adresses du tableau -- */ public function sendMails() { if ($this->_getMailInArray) { // Pour pouvoir utiliser la méthode sendMail() $this->_getMailInArray = false; // Pour chaque adresse, modifier l'adresse mail et envoyer le mail avec sendMail() foreach($this->_mailArray as $mail) { $this->_mail = $mail; self::createLineJump($this->_mail); self::sendMail(); } } else throw new exception('Ce n\'est pas cette méthode qu\'il faut utiliser. Pour envoyer l\'e-mail à une seule adresse, vous devez utiliser la méthode sendMail() !'); } /* -- Permet de modifier l'adresse e-mail et renvoyer le même mail à plusieurs adresses sans recréer un mail -- */ public function changeMail($mail) { self::verificationMail($mail); self::createLineJump($mail); } /* -- Création du retour à la ligne en fonction de l'adresse mail -- */ protected function createLineJump($mail) { // Création du retour à la ligne en fonction du serveur if (!preg_match('#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#', $mail)) $this->_passageLigne = '\r\n'; else $this->_passageLigne = '\n'; } /* -- Méthode qui vérifie la validité de l'adresse mail. Génère une exception si elle n'est pas valide -- */ protected function verificationMail($mail) { // Vérification de l'adresse email if(preg_match('#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#', $mail)) { $this->_mail = $mail; return true; } else { throw new exception('Cette adresse e-mail n\'est pas valide : "%s"', htmlspecialchars($mail)); return false; } } } ?>

Conclusion :


Comme c'est écrit, il y a encore une partie en développement qui arrivera par la suite.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.