Envoyer un mail en smtp (socket)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 13 887 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

cs_mehdibou
Messages postés
365
Date d'inscription
vendredi 24 mai 2002
Statut
Membre
Dernière intervention
18 octobre 2004
-
Je suppose que ça ne marchera pas chez Free .. ? (mail moi si ça marche)
thekingoftheweb
Messages postés
68
Date d'inscription
mercredi 9 janvier 2002
Statut
Membre
Dernière intervention
2 décembre 2002
-
Si free accepte les sockets, ça marche sur free !
Masterfight
Messages postés
20
Date d'inscription
jeudi 28 mars 2002
Statut
Membre
Dernière intervention
20 mars 2006
-
J'utilise PhpBB2 (www.phpbb-fr.com) en modifiant le serveur smtp (j'ai créé le mien sur mon poste perso) et j'obtien une erreur au niveau de l'utilisation du fsockopen...mais peut-être avez-vous trouvé la solution ?
olivierschimpf
Messages postés
5
Date d'inscription
mercredi 26 mars 2003
Statut
Membre
Dernière intervention
8 mai 2003
-
bonjour,

que faut-il mettre comme parametre dans $svr="" par exemple pour chez free
olivier
Evrae
Messages postés
58
Date d'inscription
mardi 9 décembre 2003
Statut
Membre
Dernière intervention
16 avril 2005
-
svr = ton 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.