begin process at 2012 05 27 22:09:38
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

E-Mail / Messagerie

 > CLASS MAIL GESTION COMPLÈTE

CLASS MAIL GESTION COMPLÈTE


 Information sur la source

Note :
9 / 10 - par 10 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :E-Mail / Messagerie Classé sous :mail, email, class Niveau :Initié Date de création :26/05/2007 Date de mise à jour :29/05/2007 01:52:35 Vu / téléchargé :15 514 / 1 727

Auteur : cerede2000

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

 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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 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

Source avec Zip Source avec une capture FORM TO MAIL AVEC PROTECTION PAR TOKEN ET CAPTCHA CONTRÔLES ... par cod57
Source avec Zip Source avec une capture FORMULAIRE VERS COURRIEL BASIQUE AVEC CONTRÔLE CAPTCHA ANTI ... par cod57
Source avec Zip CHAT EN PHP ET JQUERY par pitchoubrazil
Source avec Zip Source avec une capture FORMULAIRE DE CHOIX MULTI-CONTACT VALIDE XHTML 1.0 TRANSITIO... par aventurier19
Source avec Zip Source avec une capture WEB MESSENGER par EvildarkEurope

 Sources en rapport avec celle ci

Source avec Zip [PHP5] - SIMPLE CLASSE D'ENVOI D'EMAIL par codefalse
Source avec Zip Source avec une capture CLASS WEBMAIL par waterw72
Source avec Zip Source avec une capture CLASSE DE MESSAGERIE par janhsh
Source avec Zip CLASS D' ENVOIE DE MAIL EN SMTP par ImmortalPC
Source avec Zip CLASS PERMETTANT DE LIRE SES MAILS MSN ET DE SE REDIRIGER DA... par codefalse

Commentaires et avis

Commentaire de mickbad le 26/05/2007 23:37:57

pas mal et bien codé à part le manque de commentaire (pour pinailler un peu).

A propos de pinaillage, tu pourrais aller plus loin dans la configuration de ta classe.

Cette partie :
# $entete .= "X-Mailer: PHP\n";
# $entete .= "X-auth-smtp-user: webmaster@votresite.com \n";
# $entete .= "X-abuse-contact: abuse@votresite.com \n";

.. peut faire l'objet de création de constante (define) en en-tête de ton fichier, afin d'éviter d'aller chercher partout dans le code où ces informations se trouvent (et aussi savoir qu'elles existent ;) )

Ce n'est qu'un exemple c'est tout.

Good work Jim !

.Mick.

Commentaire de cerede2000 le 26/05/2007 23:42:33

Pour ca:
Cette partie :
# $entete .= "X-Mailer: PHP\n";
# $entete .= "X-auth-smtp-user: webmaster@votresite.com \n";
# $entete .= "X-abuse-contact: abuse@votresite.com \n";

Oui, mais bon j'ai mit ca pour que mon entete soit le plus complet possible mais je doute de l'interet réel ;) A voir...
Merci pour ton commentaire :D

Commentaire de codefalse le 27/05/2007 15:02:15 administrateur CS

Si tu veux pousser plus loin le code, il faut que tu envisage les mails html avec des fichiers externes (images par ex) inclues dans le mail, qui se charge automatiquement avec le mail. Tu a trois   sous types principaux pour le multipart : alternative, mixed, relative
(http://en.wikipedia.org/wiki/MIME)

Le protocol Imap est tres compliqué à mettre en oeuvre quand on veux pousser à fond le travail.

Mais ta source est quand meme tres bien ! :)
9/10 :)

Commentaire de cerede2000 le 27/05/2007 15:11:52

Oui ca j'y pense a mettre les pieces dans le mail en html ;)
C'est pour la prochaine version :D

Commentaire de cerede2000 le 27/05/2007 15:36:49

Enfin, quoi que je ne sait pas, car pour mettre une image on a juste a mettre une balise <img /> dans le mail et a joindre le fichier...
Donc en faite...

Commentaire de codefalse le 27/05/2007 16:35:40 administrateur CS

non, tu doit faire attention, ya une syntaxe particuliere, c'est du genre cid:UNIQID (ou UNIQID est un nombre unique) qui pointe dans les pieces jointes sur l'id de la piece en question.
C'est assez tendu a gerer tout ca je te l'accorde :p

Commentaire de cerede2000 le 27/05/2007 16:59:43

Tu aurais pas un exemple...

Commentaire de codefalse le 27/05/2007 17:31:11 administrateur CS

J'essaye de te filer ca pour demain ou au pire dans la semaine, car là j'ai rien sur moi ...

Commentaire de cerede2000 le 27/05/2007 18:23:32

Cool merci :) J'attent ca avec impatience ;)

Commentaire de kiki9741 le 28/05/2007 06:25:51

Euh... très pratique, il manque des toutes petites choses (déjà cité...) , vraiment bien !

Si je peux posé une question :
la fonction mail peux avoir un cinquième paramètre que tu n'a pas prix en compte, dans la doc de php :

<pre style="width:350px;">

Exemple 3. Envoi d'un mail avec un paramètre de ligne de commande additionnel.

Le paramètre additional_parameters peut être utilisé pour passer un paramètre additionnel au programme configuré à être utilisé pour envoyer les mails en utilisant sendmail_path.

<?php
     mail('personne@example.com', 'le sujet', 'le message', null,
     '-fwebmaster@example.com');
?>

</pre>

Quelqu'un peut-il nous faire profité de sa science pour nous expliquer plus en détail (avec d'autres mots peut-être ^^) ce qu'est ce cinquième paramètre

N.B. : pour ma part je bloque un peux sur le "(...) pour envoyer les mails en utilisant sendmail_path (...)", c'est quoi le sendmail_path ? oO

Merci pour tous et toutes  ^_^

8/10

Commentaire de cerede2000 le 28/05/2007 09:05:56

En effet il existe ce 5ieme parametre je vais le rajouter c'est simple ca. Je ne l'ai pas mit par choix deja parce que tu ne sait meme pas a quoi il sert mais tu le demande...
Et qu'en plus il est souvent désactivé...

Commentaire de wizad le 28/05/2007 10:21:00

C'est pas mal et bien codé. Un seul point me chagrine, le fait que certaines méthodes affiche d'elle même des éléments sur la sortie standart (echo). Il serait beaucoup plus interréssant et portable de retourner par exemple un booléen pour la réussite et en éventuel message d'erreur (par référence par exemple). Ainsi ta classe serait complètement intégrable dans n'importe quel site.

Commentaire de cerede2000 le 28/05/2007 10:38:58

Hum oui je vais voir ca ;)

Commentaire de cerede2000 le 28/05/2007 10:48:41

Et voila c'est vu ;)

Commentaire de codefalse le 28/05/2007 12:16:22 administrateur CS

@ kiki9741 : si mes souvenirs sont bons, le sendmail_path, c'est l'adresse de l'application sendmail, mais uniquement sous un systeme unix. Toi c'est un truc avec smtp_kkchose de mémoire.

@ Cerede2000 : De quoi qui est vu ? T'a trouvé ? ou tu veux quand meme un exemple ?

Commentaire de cerede2000 le 28/05/2007 12:52:44

Ce qui est vu c'est pour la gestion des erreurs et le sendmail_path ;)
Sinon oui j'attends ton exemple :D

Commentaire de codefalse le 28/05/2007 18:16:13 administrateur CS

Bon ! pour l'exemple ca commence mal, j'avais une liste de fichier type mais j'ai du tout supprimer.
Il m'en reste quelqu'uns mais aucun pour les images.

Alors voila ce que j'ai :

Une image doit etre de ce type :
<IMG src="cid:001f01c55711$86f4d520$5aa0e852@t777">

avec 001f01c55711$86f4d520$5aa0e852@t777 un truc OBLIGATOIREMENT unique (alors tu fait un truc genre md5(uniqid(time())))

et dans tes pieces jointes, tu dois les mettres comme ceci :
Conten-type : le type;
name="le_nom.ext"
Content-Transfer-Encoding: base64
Content-ID: <001f01c55711$86f4d520$5aa0e852@t777>

C'est la que tu retrouve ton ID, entre crochets!
Fait attention au type, il DOIT etre multipart, et apres je sais plus, c'est deja pas alternative de sur, mais j'hésite entre mixed, parallel ou digest.
Cherche un mail ou tu a des images incluses dedans, et fait un imap_body tu saura vite fait ! :)

Voili voilou !

Pour info :
http://www.phpcs.com/codes/ENVOI-MAIL-FORMAT-HTML-AVEC-POSSIBLITE-UTILISER-FICHIERS_33432.aspx
http://www.mathguide.de/info/tools/media-types/media-types

Commentaire de cerede2000 le 28/05/2007 20:27:38

Hum oui, mais je comprend pas l'interet d'inserer une piece jointe dans l'html a part les images...

Commentaire de cerede2000 le 29/05/2007 01:53:51

Voila, ajout automatique des pieces jointes html possedant un attribut src ;)

Commentaire de codefalse le 29/05/2007 10:56:02 administrateur CS

"Hum oui, mais je comprend pas l'interet d'inserer une piece jointe dans l'html a part les images..." => uh ? je parlais des images justement ?! j'ai pas tout compris la :p

Commentaire de ricky03 le 29/05/2007 12:47:23

Hello,
vraiment pas mal cette classe. Serait-il possible d'intégrer au message pour le destinataire, l'adresse IP, la FAI ,
Serveur (Hôte)... Enfin ce qui serait utile en cas de spam.

Commentaire de cerede2000 le 29/05/2007 15:22:59

@ricky03:
Non je ne ferais pas ca tout simplement parce que si tu veut l'intégrer toi dans ton message c'est simple a faire. Et que tout le monde n'as pas envie d'avoir ca dans son message ;)

@codefalse:
Ok, lol alors c'est bon, enfin la maintenant mon code prendra automatiquement tout ce qui contient un attribut src et l'intégrera dans le mail ;)

Bon alors on frise la perfection :D

Commentaire de codefalse le 29/05/2007 16:31:58 administrateur CS

"Bon alors on frise la perfection :D" => :p

(oui je sais c'était inutile ce commentaire :p)

Commentaire de ricky03 le 30/05/2007 12:19:46

Ben je ferai moi, c'était juste une question afin de tout avoir en un. Est-il possible d'envoyer le mail à plusieurs personnes au même temps? Si oui, comment faire cela?

Commentaire de softghost le 30/05/2007 16:01:40

Bonjour cerede2000 bonjour tous le monde

je suis entreint de travailler sur une application de mass mailing et je pense que ton code sera utile pour moi au moin pour gagné un peux de temps :)

mais le probleme que j'arrive pas a le testé et je comprend pas d'ou vien cette fonction

###  function mime_content_type()  ###

le Destinataire(s),Sujet,Message,peice jointe marche bien

mais pas d'envoi
le message d'ereur
Fatal error: Call to undefined function mime_content_type() in Mail.class.php on line 150


merci mille fois

Commentaire de cerede2000 le 30/05/2007 17:29:30

@ricky03: "Ben je ferai moi, c'était juste une question afin de tout avoir en un. Est-il possible d'envoyer le mail à plusieurs personnes au même temps? Si oui, comment faire cela?"

Oui tu peut l'envoyer a autant de personnes que tu veut... Il suffit de faire addDestinataire... Soit de la premiere facon, destinataire par destinataire:
$mail->addDestinataire('dest1');
$mail->addDestinataire('dest2');
$mail->addDestinataire('dest3');
Soit la deuxieme:
$mail->addDestinataire('dest1', 'dest2', 'dest3', ...);

Mais bon tout ca est expliqué sous le code...


@softghost:
C'est pourtant une fonction intégré a php :S
Bizarre que tu est cette erreur :S ce que tu peut faire c'est commenter la méthode
protected function htmlattachement()
Par contre tu perd l'ajout de pieces jointes dans le corps du message html...

Commentaire de WildGroup le 04/06/2007 18:02:53

Salut,
j'ai un p'tit probleme voici le message d'error
Warning: preg_replace(): Empty regular expression in /home/www/a28b375468c6548a8bb3e41efd92b082/web/system/include/class.email.php on line 215

Merçi de m'indiquer le chemin pour resoudre cette probleme

Commentaire de WildGroup le 04/06/2007 18:08:53

J'ai egalement une autre probleme le contenu d'email n'est pas affiché. Tout sauf ce que je mait dans $mail->defMessage('bla bla bla')

Merçi encore

Commentaire de WildGroup le 04/06/2007 18:24:05

J'ai une idée:
quand je r'ajout plusieurs destinataires beh par example dest1 sais que j'ai envoyé l'email au dest2 dest3 etc etc etc car dans le header il marque chaque destinataire.
pour eviter de fair un foreach en d'hors de la class y'as t'il anotre moyen de l'integrer a l'interieur? Ca evite egalement la surcharge de serveur je crois

Bonne travail mais avec des p'tits erreurs (2 jusqu'a maintenant)

Commentaire de cerede2000 le 05/06/2007 21:32:06

@WildGroup:
Warning: preg_replace(): Empty regular expression in /home/www/a28b375468c6548a8bb3e41efd92b082/web/system/include/class.email.php on line 215

Eu ligne 215... Ya pas de preg_replace dans ce coin la c'est bizarre...

Et pour envoyer un mail:
"Tout sauf ce que je mait dans $mail->defMessage('bla bla bla')"
Ca ne suffit pas il faut remplir le reste!

Commentaire de cerede2000 le 05/06/2007 21:33:09

Pense a afficher le log d'erreur, ca t'aidera...

Commentaire de WildGroup le 06/06/2007 02:41:17

Je l'ai deja fait et rien il me dis bien que l'email a etait envoyé mais rien a fair .. :( j'ai rempli le reste egalement voici la maniere de la quel je l'utile ta class

$mail = new Mail();
$mail->addDestinataire('mon@email.fr');
$mail->defSujet('Sujet email');
$mail->defMessage('Bonjour voiçi un test');
$mail->defExpediteur('admin@email.fr');
$mail->envoi('html');


e voila la fameuse ligne 215 dans mon fichier qui peux bien sur ne pas correspondre si j'ai rajoutées des entêtes ----- $this->message = preg_replace($file[1],$file[2], $this->message); ----


Donc l'email est bien envoyé mais je n'ai pas le contenu de message autrement il est vide come si j'ai rien  parametré içi : $mail->defMessage('bla bla bla');

Merçi de m'aider ..

Commentaire de cerede2000 le 07/06/2007 18:57:41

Si tu a modifier les entetes je ne peut pas t'aider!
Il n'y a rien a modifier... Les entetes sont complets!
Et si tu n'as rien c'est parce que tes entetes ne sont pas bon justement...

Commentaire de WildGroup le 09/06/2007 22:41:55

j'ai remis tout a ca place enfin come c'etait d'origine et tjr parreil ..
Alors je te demande stp de m'ecrire un mod d'utilisation un peux plus complet pour les pieces jointes car ex: mon fichier se trouve dans le dossier "themes/default/background.gif" et je ne peux pas l'attacher alors que je ne veux/peux pas utiliser le corp email avec des liens de gen http://www.site.com/themes/default/background.gif donc je reformule

Ecris moi stp un code de commande complet pour envoyer un email en html ou je peux personnalisé le fond d'ecran des tableaux avec des images egalement un style css pour le text et div

Merçi infiniment si non le code est tres bien sauf biensur mon niveau debutant car j'avoue que je ne comprend pas tout

Commentaire de cerede2000 le 11/06/2007 15:44:26

mdr!!!!! Depuis quand on exige des codes?
Le but de ma classe est atteint je ne modifierai rien de plus...
A moins qu'un gros bug soit remarqué, mais je ne plierai pas aux exigences de monsieur.
A bonne entendeur salut!

Commentaire de WildGroup le 11/06/2007 21:21:11

je n'exige rien de tout d'ailleur j'aurrais bien vulu comprendre mieux la commande pour attacher un fichier car malgrée mes efforts beh j'y arrive pas trop .. d'ailleur si on parle de beug .. essay d'envoyer dans le format HTML un code qui est egual a un implode et remplace {vars} tu vera l'espace qu'il peux y avoir (et non pas sur un mais sur plusieurs hosting) depuis le haud de body jusqu'au commencement de <table> bref .. le but de code est bien attent je ne dis pas le contraire mais j'ai demandé just de l'aide au sujet de l'attachement des fichiers
Bref.. J'utilitilise quand meme et je leve le chapeau devant ton travail car pour moi qu'est une enorme economie de temps..
Cordialement...

Commentaire de Shadow_Membre le 14/06/2007 02:57:13

très bon classe. bonne continuation.
je met 10 (tu la merite).
A+

Commentaire de toine62 le 05/07/2007 15:05:28

bonjour,
j'ai utilisé ta classe sans rien modifier et j'ai le message suivant quand je l'appelle:
"Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /mnt/160/sda/3/4/avolpoet/classes/Mail.class.php on line 5"

Commentaire de masseur le 18/07/2007 11:56:13

Dans un repertoire j'ai ma classe et un fichier index.php qui contient ceci.
$mail = new Mail();
$mail->addDestinataire('ddd@dddd.fr');
$mail->defSujet('Bonjour ceci est le sujet');
$mail->defMessage('<b>Bonjour</b>, ceci est un test de ma classe mail :D');
$mail->defExpediteur('ddd@dddd.fr');
$mail->addAttach('fichier.csv');
$mail->envoi('html');
Je recois bien le mail mais j'ai pas de pièce jointe comment cela se fait il?

Cordialement.

Jérôme

Commentaire de Evangun le 28/09/2007 18:27:57

Hello, jolie source,

juste : j'ai une alerte Undefined variable: dest in C:\Program Files\EasyPHP\www\mail.class.php on line 208.

Je n'ai pas trop regardé, mais il me semble que tu as fait l'erreur à d'autres endroits aussi.

Merci

Commentaire de neoced75 le 25/11/2007 11:27:12

Bonjour,
Je pensais oublier qqchose, mais je viens de tester avec les options obligatoires et j'obtiens toujours un "Warning: preg_replace() [function.preg-replace]: Empty regular expression ... on line 148"

J'ai utilisé les arguments obligatoires pour faire ce test:

$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();

Commentaire de tonguide le 19/01/2008 23:16:35

Juste une petite erreur de logique qui n'a pas énormement d'importance sur le fonctionnement mais je signale quand même.

sur la méthode 'envoi'
Il y a une succession de if / elseif / elseif etc ...
chacune d'elle vérifie et retourne une erreur dans la variable $erreur (si il y a une erreur evidemment).

Ensuite, on fait un "else {}" et on vérifie que la variable d'erreur est vide puis on execute.

Hors, elle est forcement vide à ce niveau là, vu qu'on a fais des "elseif" et non des "if"

Donc il suffirai juste de remplacer elseif par if (permettant de récupérer la totalité des erreurs en une fois) puis de retirer le 'else' tout en laissant le if(empty($erreur)) (qui aurait alors un intérêt).

Voila ;)

if(empty($this->destinataire))
$erreur .= 'Erreur, vous devez definir au moins un destinataire!';
if(empty($this->expediteur))
$erreur .= 'Erreur, vous devez definir un expediteur!';
if(empty($this->sujet))
$erreur .= 'Erreur, vous devez definir un sujet!';
if(empty($this->message))
$erreur .= 'Erreur, vous devez definir un message!';
if(!$this->htmlattachement())
$erreur .= 'Erreur lors de l\'attachement des fichiers present dans le message html!';

if(empty($erreur)) {

etc...

Commentaire de tonguide le 20/01/2008 00:41:36

Par rapport au bug de NEOCED75

à la ligne 148 (sur le visuel du code)

Vous avez "$this->message = preg_replace($file[1],$file[2], $this->message);"

Seulement, $file[1] et $file[2] n'étant pas toujours renseigné faites une petite verif avant, par exemple, remplacez le code ci-dessus par le suivant :

if(!empty($file[1]) && !empty($file[2])) {
  $this->message = preg_replace($file[1],$file[2], $this->message);
}

ça vous évitera d'avoir une petite erreur.

Commentaire de netphotos le 14/02/2008 19:42:40

Salut je trouve dommage que quand on met par exemple
en img dans le $mail->defMessage <img src="http://www.monsite.com/img/toto.jpg" />

ca ne marche pas sur gmail par exemple
idem avec d'autre systeme
comment faire car j'ai vraiment d'utiliser votre classe que je trouve tres bien faite

Commentaire de ptitdragonvert le 17/02/2008 11:11:52 4/10

Bien codé !
Mais $this->destinataire incorect !
Au debut j'avais tout le temps :

Warning: mail() [function.mail]: SMTP server response: 501 Bad address syntax in C:\wamp\www\Mail\mail\Mail.class.php on line 380

et en faisant des test la variable $this->destinataire en faisant :
print_r($this->destinataire);

il me resortait :

Array ( [0] => Moi )

Donc marche très mal !
A+

Commentaire de jdeheyn le 21/08/2008 10:10:01

Salut!
J'ai la même erreur que TOINE64 : "Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /mnt/160/sda/3/4/avolpoet/classes/Mail.class.php on line 5"

Cela peut-il venir du fait que ce script doit être exécuté sous PHP5, et non PHP4 ?

Commentaire de masternico le 05/06/2009 16:36:20

Salut,
mon soucis est que la variable $this->message se perd en cour de route.
Quand je fait un echo $this->message; à la fin de la proc Defmessage($mess), j'ai bien mon message, mais la variable se retrouve vide lorsque j'arrive dans constructbody()... je pige pas très bien pourquoi...
Si quelqu'un avait une piste pour m'aider

Merci

Commentaire de masternico le 05/06/2009 19:03:46

Bon, a-y-est... j'ai fini par débusquer mon bug... qui en fait était lié à un post précédent de neoced75.
Le problème, c'est que je n'avait pas d'affichage d'erreur et que la variable errorlog était toujours vide (en passant par geterrorlog())
Donc en fait la soluce avait été donnée par tomguide:

<<
à la ligne 148 (sur le visuel du code)

Vous avez "$this->message = preg_replace($file[1],$file[2], $this->message);"

Seulement, $file[1] et $file[2] n'étant pas toujours renseigné faites une petite verif avant, par exemple, remplacez le code ci-dessus par le suivant :

if(!empty($file[1]) && !empty($file[2])) {
  $this->message = preg_replace($file[1],$file[2], $this->message);
}

ça vous évitera d'avoir une petite erreur.

>>

Il serait bien que la modif soit intégrée à la source car j'y ai passé du temps... pour rien puisque la soluce était déja donnée

Commentaire de calfou le 18/02/2010 18:28:22 10/10

Merci pour cette class qui fonctionne super bien et est très facile à intégrer!!

En revanche comme le dit Masternico, il aurait été bon d'ajouter la modif qu'il cite afin de ne pas avoir cette erreur.

Commentaire de yassine_910 le 27/03/2010 20:43:46

slt ,je veux savoir avec quel serveur tu as travaille??

 Ajouter un commentaire


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:&lt;? $head Envoyer bcp de email avec mail() [ par ImmortalPC ] Salut, Je me pose &#224; un gros probl&#232;me sur un de mes scripts, envoyer beaucoup d'email ( environs 20 000 ). Le probl&#232;me c'est le time ou Expediteur dans fonction Mail() [ par Bowlest ] Bonjour,J'ai un mini probl&#232;me: en fait ma fonction mail marche tr&#233;s bien, mais lorsque je re&#231;ois le mail, son exp&#233;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


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,499 sec (4)

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