Commentçamarche.net
CodeS-SourceS
Rechercher un code, un tuto, une réponse

Classe simple email

0/5 (10 avis)

Snippet vu 6 445 fois - Téléchargée 6 fois

Contenu du snippet

Bonjour, ceci est ma toute première classe en php5, je conçois
qu'elle ne peut pas faire beaucoup de chose, mais elle a l'interet
de proceder à quelques petites verifications.Toutes critiques concernant
le code est bienvenue, j'aimerai bien progresser dans l'OO en php...
J'ajoute que je suis au courant qu'il est inutile de reinventer la roue,
et qu'il existe une multitude de bibliotheques trés bien faites,mais
j'ai écris ce code pour ceux qui le liront et pour moi-même dans un but
pédagogique.

Source / Exemple :


<?php

 class MyMail{
    private $exp;
    private $dest;
    private $cont;
    private $subject;
    private $confirmation ="Nothing sent yet";
    
    
    public function __construct(){}
    
    
    public function setExp($exp){
        if($this->verifAdMail($exp)){
            $this->exp=$exp;
        }
    }
    public function setDest($dest){
        if($this->verifAdMail($dest)){
            $this->dest=$dest;
        }
    }
    public function setCont($cont){
        if($this->verifCont($cont)){
            $this->cont=$cont;
        }
    }
    public function setSubject($subject){
        if($this->verifSubject($subject)){
            $this->subject=$subject;
        }
    }
    public function sendMyMail(){
        
        if(($this->verifAdMail($this->exp)&&$this->verifAdMail($this->dest)
            &&$this->verifCont($this->cont)&&$this->verifSubject($this->subject))){
            
               $this->cont .= '\n Send by : '. $this->exp;
               
               if(mail($this->dest,$this->subject,$this->cont)){
                      $this->confirmation=  "Your email have been sent";
               }else{
                      throw new Exception("An error occured during sending process ");
               }     
        } //Pas de else les messages d'erreurs concernés sont déjà géré par les 
           //exceptions des méthodes appellées dans le if.
    }
    public function getConfirmation(){
        return $this->confirmation;
    }

//---------------------------------------------------------------------------------------
// Les fonctions private maintenant : 
//---------------------------------------------------------------------------------------

    private function verifAdMail($exp){
         if($this->is_email($exp)&&$this->mail_exist($exp)){
             return TRUE;
         }
    }
    private function is_email($exp){
        if(!empty($exp)){
            if(filter_var($exp,FILTER_VALIDATE_EMAIL)==FALSE){
                
                throw new Exception('Invalid mail address');
            }else{
                return TRUE;
            }
         
        }else{
            throw new Exception('Expeditor is empty');
        }
    }
    private function mail_exist($exp){
        list($compte,$domaine)=split("@",$exp,2);
        if(!checkdnsrr($domaine,"MX")&&!checkdnsrr($domaine,"A")){
           throw new Exception('Invalid email'); //Ne fonctionne pas sous windows.
        }
        return TRUE;
    }
//-----------------------------------------------------------------------------------------
    private function verifSubject($subject){
        if(!empty($subject)){
        //On pourra plus tard créer un parametre tableau 
        //listant les sujets "interdits" etc....
        $subject = htmlspecialchars($subject);
        return TRUE;
        }else{
            throw new Exception('subject is empty');
        }
    }
    
//------------------------------------------------------------------------------------------    
    private function verifCont($cont){
        if(!empty($cont)){
        $cont = htmlspecialchars($cont);
        return TRUE;
        }else{
            throw new Exception('text area is empty');
        }
       
    }
}

?>

Conclusion :


Et voilà...Je pense à étoffer d'avantage les méthodes vérifiants le sujet et le contenu, en
ajoutant par exemple la possibilité de filtrer certains mots ou expressions etc...
J'attends vos avis.

A voir également

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.