Contournement de la désactivation de mail()

Soyez le premier à donner votre avis sur cette source.

Snippet vu 6 294 fois - Téléchargée 27 fois

Contenu du snippet

attention, ça necessite les sockets actives (c'est le cas chez free ;) )

Source / Exemple :


<?php

/*

  • Sendmail()
  • fonction PHP pour l'envoie de mails
  • avec mail() désactivée
*
  • utilise les sockets
*
  • la fonction getmxr a été repompée (et modifiée pour l'occasion) sur la doc de php.net, soncréateur ne m'en voudras pas d'avoir ommis son nom ;)
*
  • /
function sendMail($destinataire, $emetteur, $sujet, $message) { $damail = "Subject: $sujet To: <$destinataire> From: <$emetteur> \n $message \n \n.\n "; $mx = getMX($destinataire); $socket = connectTo($mx, 25); $rep = getSMTPcode(read($socket)); if($rep == 220) { sendTo("HELO ".$_SERVER['SERVER_NAME']."\n", $socket); $rep = getSMTPcode(read($socket)); if($rep == 250) { sendTo("MAIL FROM <".$emetteur.">\n", $socket); $rep = getSMTPcode(read($socket)); if($rep == 250) { sendTo("RCPT TO <".$destinataire.">\n", $socket); $rep = getSMTPcode(read($socket)); if($rep == 250) { sendTo("DATA\n", $socket); $rep = getSMTPcode(read($socket)); if($rep == 354) { sendTo($damail, $socket); $rep = getSMTPcode(read($socket)); if($rep == 250) { echo "mail envoyé"; } socket_close($socket); } } } } } else { echo "Erreur durant l'envoi<br>"; echo read($socket); } } function connectTo($server, $port) { $socket = socket_create (AF_INET, SOCK_STREAM, 0); $result = socket_connect ($socket, $server, $port); if(!$result) { echo "Impossible de se connecter au SMTP distant"; echo "\$result=".$result."; \$socket=".$socket."; \$server=".$server."; \$port=".$port."<br>"; exit; } return $socket; } function sendTo($buffer, $sock) { socket_write($sock, $buffer, strlen($buffer)); } function read($sock) { $out = socket_read($sock, 2048); return $out; } function getSMTPcode($str) { $code = substr($str, 0, 3); return $code; } function MXtest($MX) { $mxsock = socket_create (AF_INET, SOCK_STREAM, 0); if(socket_connect($mxsock, $MX, 25)) { return true; } else { return false; } } function getMX($email) { $srv_array = explode("@", $email); $srv = $srv_array[1]; $servsoft = $_SERVER["SERVER_SOFTWARE"]; if(!substr_count($servsoft, "Win")) { getmxrr($srv, $servers); $servers[0] = gethostbyname($servers[0]); return $servers[0]; } else { $servers = getmxr($srv); for($i = 0; $i < count($servers); $i++) { if(MXtest($servers[$i])) { return $servers[$i]; break; } } } } function getmxr($srv) { if(substr_count($srv, ".") < 2) { $command = "nslookup -type=mx ".$srv; exec ( $command, $result ); $i = 0; while ( list ( $key, $value ) = each ( $result ) ) { if ( strstr ( $value, "mail exchanger" ) ) { $nslookup[$i] = $value; $i++; } } while ( list ( $key, $value ) = each ( $nslookup ) ) { $temp = explode ( " ", $value ); $mx[$key][0] = $temp[3]; $mx[$key][1] = $temp[7]; $mx[$key][2] = gethostbyname ( $temp[7] ); } for($i = 0; $i < count($mx); $i++) { $mail[$i] = $mx[$i][2]; } } else { if(MXtest($srv)) { $mail[0] = gethostbyname($srv); } } return $mail; } ?>

Conclusion :


pour l'utiliser, le mieu est de mettre ça dans un script, à inclure, puis d'appeler la fonction par

sendMail($destinataire, $emetteur, $sujet, $message);

exemple, pour envoyer un courrier contenant "bonjour, ça va", et ayant comme sujet "bien?" à duchmol@laposte.net, depuis la boite trouduc@msn.com, on taperas

sendMail("duchmol@laposte.net", "trouduc@msn.com", "bien?", "bonjour, ça va?");

simple ;)

ça marche théoriquement (du moins, chez moi)
mais c'est certainement pas exempts de bug, alors n'hésitez pas à critiquer pour que je débug ça ;)

A voir également

Ajouter un commentaire

Commentaires

Messages postés
122
Date d'inscription
mercredi 25 février 2004
Statut
Membre
Dernière intervention
2 juillet 2014

Vous voulez une info ????

La fonction mail() est rétablie chez free depuis 2 ou 3 mois lol !!!

Perso je galèrais à renvoyer mes visiteurs sur une page multimania pour que ça marche.
Plus besoin maintenant !
Une preuve ? www.alacigogne.com (hébergé chez free)
Messages postés
195
Date d'inscription
vendredi 13 octobre 2000
Statut
Membre
Dernière intervention
8 juillet 2004

En generale les espace que tu loue/achete n'ont aucune fonction desactive(sauf peut-etre quand tu loue mais pas la fonction mail)

mais c'ette se voulais etre une alternative a la fonction mail sauf que manque de bol sur certain serveur comme free il vont jusqu'a bloque le port de mail...

mais sinon utilise la fonction mail qui evite de rajouter du code pour rien

Au faite il aurait mieux value utiliser fsockopen qui est plus utilise et qui marche même si l'option '--with-socket' est omise
Messages postés
40
Date d'inscription
lundi 7 mai 2001
Statut
Membre
Dernière intervention
12 août 2003

bah faut que les sockets soitent autorisés, sur OVH je crois que oui
Messages postés
438
Date d'inscription
vendredi 9 mai 2003
Statut
Membre
Dernière intervention
26 juillet 2007
3
euh, mais cette fonction mail, ya pas de problème sur les site ou tu achetes ton nom de domaine et ton espace?(enfin plutot loue...)

si je vais bientot etre en possession d'un site en .net, et kil est hébergé chez OVH, ya pas de prob hein???
Messages postés
195
Date d'inscription
vendredi 13 octobre 2000
Statut
Membre
Dernière intervention
8 juillet 2004

...(sans reponse) je l'aurais pas mentionner si elle n'etait pas active bon dsl mais je vais plus repondre car mon email sature...
Afficher les 42 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.