Envoyer un mail via un serveur smtp relais

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 357 fois - Téléchargée 32 fois

Contenu du snippet

Cette petite fonction dont je ne suis pas l'auteur (grand merci a Sylvain De Feo, Université de Rennes 1), permet d'envoyer un mail sans passer par le système de messagerie local.
Elle m'a été très utile sous Linux ou je n'arrivait pas a configurer sendmail correctement.

il n'y a qu'a configurer le serveur de mail, et ensuite c'est comme la fonction mail() de php.

Source / Exemple :


// definition du serveur de mail
define("SERVEURMAIL","197.234.22.485");
ou
define("SERVEURMAIL","mailhost.monDomaine.fr");

//fonction email

function email($from, $to, $subject, $msg,$content="text/plain"){
 $headers = "MIME-Version: 1.0\r\n";
 $headers .= "Content-type: ".$content;
 $headers .= ";charset=iso-8859-1\r\n";
 $headers .= "Reply-To: $from\r\n";
 $headers .= "X-Mailer: PHP SCRIPT";
       
		if ($from!=null && $to!=null && $subject!=null && $msg!=null)
			//&& checkmail($from)&&checkmail($to)
        { 
        $connection = fsockopen (SERVEURMAIL,25, &$errno, 
&$errstr, 1);
                if (!$connection) {
                 return false;
                } else {
                 $res1=fgets($connection, 256);
                 if(substr($res1, 0, 3) != "220") return false;
 
                 fputs($connection, "HELO localhost\n");
                 $res2=fgets($connection, 256);
                 if(substr($res2, 0, 3) != "250") return false;
 
                 fputs($connection, "MAIL FROM: $from\n");
                 $res3=fgets($connection, 256);
                 if(substr($res3, 0, 3) != "250") return false;
 
                 fputs($connection, "RCPT TO: $to\n");
                 $res4=fgets($connection, 256);
                 if(substr($res4, 0, 3) != "250") return false;
 
                 fputs($connection, "DATA\n");
                 $res5=fgets($connection, 256);
                 if(substr($res5, 0, 3) != "354") return false;
 
                 fputs($connection, "TO:$to\nFrom:$from\nSubject:$subject\n$headers\n\n$msg\n.\n");
                 $res6=fgets($connection, 256);
                 if(substr($res6, 0, 3) != "250") return false;
 
                 fputs($connection, "QUIT\n");
                 $res7=fgets($connection, 256);
                 if(substr($res7, 0, 3) != "221") return false;
 
                 fclose ($connection);}
                 if(substr($res1, 0, 3) == "220" && substr($res2, 0, 3) 
== "250" && substr($res3,0, 3) == "250" && substr($res4, 0, 3) == "250" 
&& substr($res5,
 0, 3) == "354" && substr($res6, 0, 3) == "250" && substr($res7, 0, 3) 
== "221") return true;
    }else{
        return false;
        }
}

Conclusion :


Cette fonction n'a pas la prétention d'être exhaustive, mais elle peut servir dans pas mal de cas, surtout pour les nbx personnes qui comme moi se perdent dans linux :-)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
16 mai 2008

mais sinon ca marche je viens de recevoir le mail dans le dossier "courrier indesirable" parceque j'avais mis un email bidon !! :) Merci comme meme
Messages postés
4
Date d'inscription
lundi 30 janvier 2006
Statut
Membre
Dernière intervention
16 mai 2008

je recois ca comme reponse , apres avoir tester ta fonction

Warning: Call-time pass-by-reference has been deprecated - argument passed by value; If you would like to pass it by reference, modify the declaration of fsockopen(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file. However, future versions may not support this any longer. in c:\program files\easyphp1-8\www\smtp.php on line 19
Messages postés
53
Date d'inscription
mercredi 22 février 2006
Statut
Membre
Dernière intervention
15 novembre 2006

Franchement trop pourris le code!
Il marche meme pas!
Ca servait à rien de le mettre...
Messages postés
105
Date d'inscription
jeudi 24 juin 2004
Statut
Membre
Dernière intervention
28 juin 2006

Salut,
j'aurai communiqué ces informations avec plaisir.....si je les avais eu...
comme je le dis dans la présentation, cette fonction m'a été envoyée par un des responsable du CRI de l'université de Rennes 1.
désolé ;-)
Messages postés
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1
Tu peux marquer ou tu as pris la doc pour les echanges de commandes au serveur SMTP ?

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.