begin process at 2012 05 27 22:15:29
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > CLASSE MAIL

CLASSE MAIL


 Information sur la source

Note :
9,5 / 10 - par 2 personnes
9,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Class et Objet ( POO ) Classé sous :mail, e-mail, courriel, envoyer Niveau :Initié Date de création :20/08/2010 Vu :2 718

Auteur : djguigui34400

Ecrire un message privé
Site perso
Commentaire sur cette source (3)
Ajouter un commentaire et/ou une note

 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

Source avec Zip GÉNÉRATION AUTOMATIQUE DE FICHIER .CLASS.PHP EN FONCTION D'U... par ig3
CLASSE D'OBJET DE CRYPTAGE ET DÉCRYPTAGE DE CHAINES DE CARAC... par 8Tnerolf8
Source avec Zip MY.DEVIANTART API par inwebo
CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture SIMPLE EMAILING SERVICE par mtrix000
FONCTION ENVOI DE MAIL PHP QUI PERMET DE PASSER LE FILTRE AN... par alienat
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip Source avec une capture FORM2MAIL HTML / PHP par maxpag
Source avec Zip Source avec une capture NEWSLETTER AVEC BASE DE DONNÉE par piranhaworld

Commentaires et avis

Commentaire de MarocOS le 13/12/2010 01:01:47 10/10

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

Commentaire de Qtronik le 23/12/2010 23:06:10 9/10

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 ?

Commentaire de djguigui34400 le 24/12/2010 09:30:59

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 !

 Ajouter un commentaire


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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales