Envoyer un mail via un serveur smtp relais

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 167 fois - Téléchargée 34 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
dremos Messages postés 4 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 16 mai 2008
17 janv. 2008 à 04:06
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
dremos Messages postés 4 Date d'inscription lundi 30 janvier 2006 Statut Membre Dernière intervention 16 mai 2008
17 janv. 2008 à 04:04
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
badr07 Messages postés 53 Date d'inscription mercredi 22 février 2006 Statut Membre Dernière intervention 15 novembre 2006
3 août 2006 à 23:14
Franchement trop pourris le code!
Il marche meme pas!
Ca servait à rien de le mettre...
ronanf235 Messages postés 105 Date d'inscription jeudi 24 juin 2004 Statut Membre Dernière intervention 28 juin 2006
21 août 2004 à 21:17
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é ;-)
cs_GRenard Messages postés 1662 Date d'inscription lundi 16 septembre 2002 Statut Membre Dernière intervention 30 juillet 2008
21 août 2004 à 03:54
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.