Envoyer un mail en smtp (socket)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 971 fois - Téléchargée 27 fois

Contenu du snippet

Ce code est crée en colaboration avec Cl?m, il permet d'envoyer un mail en envoyant des requettes à un serveur SMTP, ce qui évide de passer par le fonction mail().
Je le diffuse surtout pour voir si vous pouvez essayer de faire une gestion d'erreur, alors svp si vous savez, essayer de voir moi je ne connais pas les réponses des serveurs SMTP et les differentes erreurs plus ou moins rares.

Source / Exemple :


<?
$message=str_replace("\\\"","\"",str_replace("\\\\","\\",$message));

function cl_mail($nom_exp,$exp,$nom_desti,$desti,$sujet,$msg,$svr="") {
	if ($nom_exp==="") {list($nom_exp, $z) = explode("@", $exp);}	    //Si le nom de l'expéditeur n'a pas été spécifié, choisit celui de la partie gauche de l'email de l'envoyeur
	if ($nom_desti=="") {list($nom_desti, $z) = explode("@", $desti);}  //Même chose avec le nom du receveur
	if ($svr=="") {list($z, $svr) = explode("@", $desti);}		    //Même chose, avec le serveur
	$fp=fsockopen("$svr","25",$errno,$errmsg);			    //On ouvre un socket vers le serveur smtp, au port 25 (smtp)
	if ($errno=="0") {
		$ip=explode(".", $svr);  //On sépare toutes les parties spérarées par les "."
		$is_ip=true;
		if (count($ip)==4) {
			for ($i=0;$i<count($ip);$i++) {
				if ($ip[$i]<1 | $ip[$i]>255) {	//On vérifie si c'est bien un nombre compris entre 0 et 255
					$is_ip=false;
				}
			}
		} else {
			$is_ip=false;
		}
		if ($is_ip==true) {
			fputs($fp,"HELO " . gethostbyaddr($svr) . "\n");
		} else {
			fputs($fp,"HELO " . $svr . "\n");
		}
		fputs($fp,"MAIL FROM: <$exp>\n");
		fputs($fp,"RCPT TO: <$desti>\n");
		fputs($fp,"DATA\nFROM: $nom_exp <$exp>\nTO: $nom_desti <$desti>\n");
		if ($sujet!="") {fputs($fp,"SUBJECT:$sujet\n");}
		if (strpos($msg,"<html>")>-1) {fputs($fp,"CONTENT-TYPE: TEXT/HTML;\n");}
		fputs($fp,"\n$msg");
		fputs($fp,"\n.\n");
		fputs($fp,"QUIT\n");
		$new="";
		while($new=fgets($fp,1024)) {
			$resultat=$resultat . str_replace(Chr(10),"<br>",$new);
		}
		if (strpos($resulat,"501")>-1) {return "ERREUR : Adresse émetteur refusée par le serveur...";}
		if (strpos($resulat,"503")>-1) {return "ERREUR : Adresse recepteur refusée par le serveur...";}
		if (strpos($resultat,"550")>-1 | strpos($resultat,"500")>-1) {return "Erreur";} else {return "Ok";}
	} else {							     //Si erreur
		return "ERREUR : Connexion immpossible au serveur smtp ($svr).";
	}
}
if ($sujet!="" | $from!="" | $to!="" | $message!="") {
  $result=cl_mail("$fromname","$from","$toname","$to","$sujet","$message","$svr");
  if ($result=="Ok") {
    echo("<font color=\"#FF0000\">Mail envoyé.</font>");
  } else {
    echo("<font color=\"#FF0000\">$result</font>");
  }
} else {
  echo("Vous devez replir tout les paramêtres.");
}
?>

Conclusion :


King 2002
www.jeuxenligne.fr.st

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1
Date d'inscription
vendredi 25 mars 2011
Statut
Membre
Dernière intervention
10 mars 2013

Salut, les amis je suis novice en php , je cherche un script qui permet de vérifier l'état d'un serveur mail
Par exemple je veux vérifier cette adresse :
smtp:mx1topnet.ingw.tn

Je cherche quelque chose comme dans ce site :
www.mxtoolbox.com

Merci pour votre aide e
Messages postés
209
Date d'inscription
samedi 11 novembre 2000
Statut
Membre
Dernière intervention
6 novembre 2009

Super, c'est ce que je cherchait, c'est même ce que je venais de commencer (j'en était toujours à lire la RFC) alors que j'ai eu l'idée de chercher "smtp" sur phpcs :)

Ton code me fait gagner du temps :p
Messages postés
64
Date d'inscription
vendredi 21 novembre 2003
Statut
Membre
Dernière intervention
29 juillet 2006

Bonjour,
Manque important d'explication.
Messages postés
296
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
21 novembre 2008

est ce que quelque un peut me dire comment utiliser cette source svp merci
Messages postés
126
Date d'inscription
dimanche 27 mars 2005
Statut
Membre
Dernière intervention
16 octobre 2010

Ce code marche encore a l'heure actuelle?
Afficher les 10 commentaires

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.