Classe mail

Soyez le premier à donner votre avis sur cette source.

Snippet vu 4 868 fois - Téléchargée 17 fois

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

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
samedi 19 janvier 2008
Statut
Membre
Dernière intervention
24 décembre 2010

Pour commencer, l'utilité du "-----=".md5(rand()) dans le header, c'est ce qu'on appelle la boudary, c'est elle qui va permettre de structurer le mail du style :

En-têtes
//boudary
Message
//boudary
//...

Concernant les -----=, suivie d'un nombre aléatoire chiffré, c'est comme ça qu'elle se doit d'être.

Pour le format de saut de ligne, je l'ai lu sur plusieurs forums, puis il y a un tuto sur le sdz qui en parle : http://www.siteduzero.com/tutoriel-3-35146-e-mail-envoyer-un-e-mail-en-php.html

D'origine, je n'ai pas intégré de l'html/css car je l'utilise uniquement dans une architecture MVC. Mais quand tu auras fini, n'hésite pas à la faire partager !
Messages postés
16
Date d'inscription
samedi 20 novembre 2010
Statut
Membre
Dernière intervention
8 mars 2011

wow ! Je suis prêt a suivre de très proche tes versions et tes idées ! J'aime bien l'idée de la vérification du domaine du email a contacter! J'ai tout pleins d'idées sur ce sujets! Genre fabriquer un lien de directions vers ce domaine ex: Hotmail.com pour un envoie d'une validation d'inscription !

Je voudrais tenter ta classe sur mon projet mais je vais travailler dessu pour y ntegrer le format HTML eet css aussi.

Je me demande ou as tu pris l'informations sur le format de saut de lignes pour msn\live\hotmail ? Parce que ca aiderais énormément pour le formatage de différent mailServices...

Autre chose... Quel est l'utilité du -----.md5 pour le header ?
Messages postés
2
Date d'inscription
lundi 9 avril 2007
Statut
Membre
Dernière intervention
13 décembre 2010

pas testé mais apparemment excellente juste il faut plus de lignes headers pour que sa tombe plus dans le junk mail

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.