Une classe de mail qui retourne true mais qui n'envoie rien

Mammouth du PHP | 965 Messages

20 nov. 2008, 11:37

Bonjour à tous,

J'ai créer une simple classe de mail qui correspond juste à ce que j'ai besoin, avec une vérification sur certains champs, sur l'expéditeur et ensuite un envois basique tout n'est pas finis j'ai pas encore créer les entêtes mais pour l'instant j'ai ça :
<?php

class Mail
{
       protected $erreur;
	protected $expediteur;
	protected $destinataire;
	protected $objet;
	protected $message;

	public function __construct() {
		$this->expediteur = '';
		$this->destinataire = '';
		$this->objet = '';
		$this->message = '';
	}
	
	public function __toString() {
		return "Classe envoie de mail.";
	}
	
	function setExpediteur($expediteur) {
		$this->expediteur = $expediteur;
	}
	
	function getExpediteur() {
		return $this->expediteur;
	}
	
	function setObjet($objet) {
	  $this->objet = $objet;
	}
	
	function getObjet() {
	  return $this->objet;
	}
	
	function setDestinataire($destinataire) { 
	  $this->destinataire = $destinataire;  	 
	}
	
	function getDestinataire() {
	  return $this->destinataire;
	}
	
	function setMessage($liste) {
	  // Création du message
	  foreach($liste as $key => $value) {
	    $this->message .= "<p>";
      $this->message .= $key." : ".($this->champsMailOk($value))? $value : 'non renseigné';
      $this->message .= "</p>";
	  }
	}
	
	function getMessage() {
	  return $this->message;
	}

	function sendMail() {
	  if( (!$this->checkExpediteur() === false) ) {
		  if(mail($this->getDestinataire(),$this->getObjet(),$this->getMessage()))
		  {
		    echo "ok";
		  }
		  else{
		    echo "Nok";
		  }
	  }
	}
	
	function checkExpediteur() {
		return filter_var($this->getExpediteur(),FILTER_VALIDATE_EMAIL);
	}
	

	function possedeSautDeLignes($var) {

		return( strstr($var, "\n") or strstr($var, "\r") or strstr($var, "%0A"));

	}



	function contientHeaders($var) {

		$MOTIF_ERRONE = '*****eRrOr*****';

		$headersAChercher = array("/Content\-Type\:/i","/bcc\:/i","/cc\:/i","/to\:/i", "/Mime\-Type\:/i","/subject\:/i","/from\:/i");

		$var = preg_replace($headersAChercher, $MOTIF_ERRONE, $var);

		return( strstr($var, $MOTIF_ERRONE) );

	}



	function champsMailOk($champsMail) {

		return( !$this->contientHeaders($champsMail) && !$this->possedeSautDeLignes($champsMail) );

	}
}	
Et ensuite dans une page php :

  $mail = new Mail();
  $mail->setExpediteur($_POST['email']);
  $mail->setDestinataire('[email protected]');
  $mail->setObjet('Contact');
  $mail->setMessage(array('Société'     => $_POST['societe'],
                          'Nom'         => $_POST['nom'],
                          'Prénom'      => $_POST['prenom'],
                          'Fonction'    => $_POST['fonction'],
                          'Adresse'     => $_POST['adresse'],
                          'Code postal' => $_POST['cp'],
                          'Ville'       => $_POST['ville'],
                          'Téléphone'   => $_POST['tel'],
                          'Fax'         => $_POST['fax']));
  $mail->sendMail();                          

Quand je test il me retourne "ok" donc la fonction mail semble bien passer :/

un simple

mail('[email protected]','entete','message');

marche je le reçois avec une entête ***SPAM*** mais je le reçois bien.

Une idée ?