Mail pour les sites free.fr (mise a jour le 17mars2004 10h24)

Contenu du snippet

C'est la deuxiemme fonction mail que je fait pour les sites free.
en effet les freenautes, moi meme, n'ont ni le droit a la fonction mail ni le droit d'ouvrir une connexion sur le port 25 (smtp).

bon celui ci après plusieurs teste semble marcher correctement.

Si vous avez des questions n'hesité pas.

Source / Exemple :


<?
/*
Fonction mail v2.301

date de creation:
    mardi 27 janvier 2004.
    
Mise à jour:
    dimanche 17 mars 2004 09h52
    	Nouveau:
    	    possibilité d'envoi d'une pièce jointe (voir plus bas pour son utilisation).
    	PS: Les mails contenant des fichiers trop gros, c'est à dire dépassement la limite tolerer en upload par
    	    l'hebergeur seront envoyé en mail simple (sans pièce jointes);
    mercredi 18 février 2004 15h11
        Nouveau:
            la fonction admet un nouveau parametre => l'expediteur
            ce qui permet de changer d'adresse de l'expediteur a souhait...
            remarque si vous le laisser vide "" c'est l'adresse du compte 
            qui sera prise en compte
    mercredi 28 janvier 2004 23h28.
        correction du bug signalé par Urukai1 (Impossible d'etablir la connexion avec pour http://imp3-q.free.fr&uniq=10753247119291075324711ooooo)
    mercredu 28 janvier 2004 04h50.
        code accelerer d'une etape.
    vendredi 30 janvier 2003 21h43.
        correction de la variable unique.
    samedi 1 fevrier 2003 02h30.
        prise en charge des opérations de maintenance.
    
Avantage:
    Sans Limite.
    Aucune pub.
    
Inconvenient:
    Lent.
    Lors de l'envoi de mail successif, certain peuvent sembler etre du courrier indesirables.

Coded by mmaxuel for ed2k.mmaxuel.free.fr

Completez les champs $compteFree et $passFree pour le rendre operationnel.

renvoie TRUE si le mail a bien ete renvoyer et FALSE si non...
exemple:
    $res = MailH("moi@moi.fr,"toi@toi.fr","Bonjour","Rappelle moi s'il te plait.");
    
    if($res) 
        echo "ok";
    else 
        echo "ooooo";

exemple avec pièce jointes:
    $res = MailH("moi@moi.fr,"toi@toi.fr","Bonjour","Rappelle moi s'il te plait.","fichier texte.zip");
    
    if($res) 
        echo "ok";
    else 
        echo "ooooo";

FONCTION mail POUR LES SITES FREE.FR

C'est la deuxiemme fonction mail que je fait pour les sites free.
en effet les freenautes, moi meme, n'ont ni le droit a la fonction mail ni le droit d'ouvrir une connexion sur le port 25 (smtp).

bon celui ci après plusieurs teste semble marcher correctement.

Si vous avez des questions n'hesité pas.

Voir ci dessous

  • /
function MailH($expediteur, $destinataire, $sujet, $message) { $sujet = urlencode($sujet); $message = urlencode($message); $compteFree = ""; $passFree = ""; $debug = false; if($expediteur=="") $expediteur = $compteFree. "@free.fr"; static $url_compose; static $horde; static $serveur; static $action; static $i; if($i<=0) $i=2; //////// if($url_compose=="" || $horde=="" || $serveur=="" || $action=="") { //Etape 1 //On recupere le horde sur la page d'accueil... $response = SocketMail("http://imp.free.fr/","","","80"); preg_match_all("/<form action=\"([^\"]+)\" method/i", $response, $matches); $action = $matches[1][0]; preg_match_all("/Horde=([^\"]+)\" method/i", $response, $matches); $horde = $matches[1][0]; if($debug) echo "<textarea rows=4 cols=100>1)\r\n". $horde. "\r\n". $action. "</textarea>"; //////// //Etape 2 //Ensuite on s'identifie... $argument = "actionID=105&mailbox=INBOX&imapuser=$compteFree&pass=$passFree&server=imap&folders=INBOX/&new_lang=fr_FR"; $response = SocketMail("http://imp.free.fr$action",$argument,"POST","80"); preg_match_all("/Location: ([^\n]+)\n/i", $response, $matches); $action = $matches[1][0]; preg_match_all("/\/\/([^\/]+)\//i", $action, $matches); $serveur = $matches[1][0]; preg_match_all("/$serveur(\/[^\r]+)\r/i", $response, $matches); $action = $matches[1][0]; if(str_replace("reason=failed","",$action)!=$action) { echo "identifiant free incorrecte.<br>Modifier les parametres de la fonction Mail."; } if($debug) echo "<textarea rows=4 cols=100>2)\r\n". $action. "\r\n". $serveur. "</textarea>"; if(str_replace("maintenance.php", "", $response) != $response) { //Etape 2.2 //on observe la page de maintenance... $response = SocketMail("http://". $serveur. $action, "","GET","80"); preg_match_all("/<form method=\"post\" action=\"([^\"]+)\"/i", $response, $matches); $action = $matches[1][0]; if($debug) echo "<textarea rows=4 cols=100>2.2)\r\n". $action. "\r\n". $serveur. "</textarea>"; //Etape 2.3 //on effectue la maintenance... $argument = "confirm_maintenance=1&Horde=$horde"; $response = SocketMail("http://". $serveur. $action, $argument,"POST","80"); preg_match_all("/Location: ([^\n]+)\n/i", $response, $matches); $action = $matches[1][0]; preg_match_all("/\/\/([^\/]+)\//i", $action, $matches); $serveur = $matches[1][0]; preg_match_all("/$serveur(\/[^\r]+)\r/i", $response, $matches); $action = $matches[1][0]; if($debug) echo "<textarea rows=4 cols=100>2.3)\r\n". $action. "\r\n". $serveur. "</textarea>"; } //////// //Etape 3 //On extrait de la page INBOX l'url qui permet de composer un e-mail $response = SocketMail("http://$serveur$action","","GET","80"); preg_match_all("/var url = \"([^\"]+)\"/i", $response, $matches); $url_compose = $matches[1][0]; if($debug) echo "<textarea rows=4 cols=100>3)\r\n". htmlentities($url_compose). "</textarea>"; } /////// //Etape 4.0 //on poste la pièce jointe si necessaire... if(func_num_args() > 4) { $tabArgs = func_get_args(0); $fileToUpload = $tabArgs[4]; $response = uploadFile("http://$serveur". $url_compose, "sent_mail_folder=INBOX/sent-mail&thismailbox=INBOX&popup=1&reloaded=1&attachmentAction=add&actionID=122",$fileToUpload); preg_match_all("/attachments_name\[\]\" value=\"([^\"]+)\"/i", $response, $matches); $attachments_name = $matches[1][0]; preg_match_all("/attachments_size\[\]\" value=\"([^\"]+)\"/i", $response, $matches); $attachments_size = $matches[1][0]; preg_match_all("/attachments_file\[\]\" value=\"([^\"]+)\"/i", $response, $matches); $attachments_file = $matches[1][0]; preg_match_all("/attachments_type\[\]\" value=\"([^\"]+)\"/i", $response, $matches); $attachments_type = $matches[1][0]; //$unique = $matches[1][0]; if($attachments_size != "") $fileUploaded = true; else $fileUploaded = false; if($debug) echo "<textarea rows=4 cols=100>4.0)\r\n". htmlentities($attachments_name. "\r\n". $attachments_size. "\r\n". $attachments_file. "\r\n". $attachments_type). "</textarea>"; } /////// //Etape 4.1 //On poste le message... if(substr($serveur,strlen($serveur)-1,strlen($serveur))!="/" && substr($url_compose,0,1)!="/") $url_compose = "/". $url_compose; if($url_compose=="") $url_compose = "/horde/imp/compose.php?Horde=$horde"; $argument = "reloaded=1&actionID=114&last_identity=0&bcc=&from=$expediteur&to=$destinataire&subject=$sujet&save_sent_mail=&request_return_receipt=&message=$message"; //On oublie pas les variables des pièces jointes si nécessaire... if(func_num_args() > 4 && $fileUploaded) $argument .= "&attachments_name[]=" . $attachments_name. "&attachments_size[]=". $attachments_size. "&attachments_file[]=". $attachments_file. "&attachments_type[]=". $attachments_type; $response = SocketMail("http://$serveur". $url_compose. "&uniq=". rand(100000000000000000000000000,999999999999999999999999999). date("B"). (mktime()-735*$i),$argument,"POST","80"); $i = $i+$i*$i; if($debug) echo "<textarea rows=4 cols=100>4.1)\r\n". htmlentities($response). "</textarea>"; //On vérifie tout est OK! if(str_replace("window.close();","",$response)!=$response) return TRUE; else return FALSE; } function uploadFile($destination, $parametre, $fichier) { $debug = false; $response = ""; $boundary = "-----------------------------". rand(1000000000000000000,9999999999999999999); if(is_File($fichier)) { if(filesize($fichier) < 2097152) //Soit 1024 * 1024 * 2 = 2Mo { $hwnd = fopen($fichier,"r"); $contenu = fread($hwnd, filesize($fichier)); fclose($hwnd); $argument = "--". $boundary. "\r\nContent-Disposition: form-data; name=\"msie_formdata_is_broken\"\r\n\r\n\r\n"; $tab = split("&",$parametre); if($debug) { echo "Debut tableau split:<br>"; foreach($tab as $a => $b) echo "\"$a\" = \"$b\"<br>"; } $i = 0; foreach($tab as $a => $b) { if($b != "") { $tab2 = split("=", $tab[$i], 2); $argument .= "--". $boundary. "\r\nContent-Disposition: form-data; name=\"". $tab2[0]. "\"\r\n\r\n". $tab2[1]. "\r\n"; } ++$i; } $argument = $argument. "--". $boundary . "\r\nContent-Disposition: form-data; name=\"file_upload\"; filename=\"". basename($fichier). "\"\r\nContent-Type: text/plain\r\n\r\n". $contenu. "\r\n--". $boundary. "--\r\n"; if($debug) echo str_replace("\r\n","<br>",$argument); $response = SocketMail($destination, $argument, "POST", "80", "Pragma: no-cache\r\nContent-Type: multipart/form-data; boundary=\"". $boundary. "\""); } else $response = ""; } else echo "\"$fichier\" n'est pas un fichier valide"; return $response; } function SocketMail($adresse,$argument,$methode,$port,$contentType="") { preg_match_all("/\/\/([^\/]+)\//i",$adresse,$matches); $serveur = $matches[1][0]; preg_match_all("/$serveur(\/[^\r]*)\r/i",$adresse. "\r",$matches); $action = $matches[1][0]; if($port=="") $port = 80; if(strlen($argument)>0) $methode = "POST"; elseif($methode=="") $methode = "GET"; $debug = false; $hwnd = fsockopen($serveur, $port, &$errno, &$errstr, 5); if($hwnd) { $sheader = "$methode $adresse HTTP/1.0\r\n". "Connection: Keep-Alive\r\n". "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)\r\n". "Host: $serveur\r\n"; if($contentType=="") $sheader .= "Content-type: application/x-www-form-urlencoded \r\n"; else $sheader .= $contentType. " \r\n"; if(strlen($argument)>0) { $sheader = $sheader. "Content-length:". strlen($argument). "\r\n\r\n". $argument. "\r\n"; } $srequete = $sheader. "\r\n"; fputs($hwnd,$srequete); if($debug) echo str_replace("\r\n","<br>\r\n",$srequete). "<br>"; $response = ""; $a=1; while(($res = fgets($hwnd,1024)) && ($a==1)) { $response = $response. $res; if($res=="0\r\n") $a=0; } fclose($hwnd); return $response; } else { echo "Impossible d'etablir la connexion avec $serveur pour $adresse"; return FALSE; } } ?>

Conclusion :


Voir ci dessous

A voir également

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.