Accueil > > > CLASSE MAIL
CLASSE MAIL
Information sur la source
Description
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
- <?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;
- }
- }
- }
-
- ?>
<?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.
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
envoyer un courriel en php [ par proluxon ]
Bonjour, Je suis vraiment un débutant en PHP. Je voulais que mon site web envoie un mail directement, sans que Outlook ouvre automatiquement pour l'ut
Envoyer l affichage d une page php par mail [ par mimimou ]
Bonjour a tous, Pour ceux qui connaissent bien Safari, lorsque vous etes sur une page web, vous avez dans le menu file une fonction qui s appelle "Ma
envoyer un courrier a mes membres [ par hades33 ]
bonsoir je souhaiterai pouvoir envoyer un mailto a un membre qui viens de s inscrire sur mon site de facon automatique c'est a dire que la page de t
Envoyer par mail un fichier téléchargé par le biais d'un formulaire html [ par Elisa23 ]
Bonjour,[^^happy13] Je cherche depuis des jours mais, là, je craque... Tant pis pour ma fierté ! J'espère que vous pourrez m'aider... J'ai fait un f
envoyer un mail en php [ par soukaouta ]
bonjour tout le monde [^^clinoeil1] j'ai une question,comment je peux faire un formulaire qui envoie un e-mail avec trois champs("à" "objet" + le cham
problème pour envoyer un mail depuis un formulaire [ par xargin ]
Bonjour, je poste ce message pour demander de l'aide. En effet, je dois envoyer un mail depuis un formulaire html. Pour cela, j'ai fait une page php
Envoyer un mail a mon adresse [ par jerome01234567899 ]
Bonjours, je suis débutant dans le php j'ai fait un formulaire je vous le met: Inscription Ecole de Nostale : Inscription Nom : <input type=te
envoyer email avec blat [ par lahlousimo ]
bonjour,j'ai pas pu envoyer un mail avec les code source que j'ai trouvé ici ,je ne sais pas ou est le probleme , mais j'ai reussi d'envoyer un email
envoyer 1 e-mail via lotus notes [ par alonsyl ]
bonjour, pourriez-vous me dire comment on fais pour envoyer un mail en php non pas via un serveur smtp mais via un serveur lotus notes ?merci a
envoyer et recevoir des mail a travers un webmail cencevoir [ par dfs ]
? set up un web mail envoyer et recevoir des mails
|
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
|