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

5/5 (79 avis)

Snippet vu 11 595 fois - Téléchargée 27 fois

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

Ajouter un commentaire Commentaires
dirtyjackfr Messages postés 8 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 15 février 2004
25 nov. 2004 à 21:18
Bonjours à tous

Je sais que la fonction mail fonctionne ( normalement ) maintenant sur Free, mais je suis plutôt attaché à ce script, notament parceque je ne me sert pas de ma boîte mail de free à des fins perso, alors si elle peu servir pour mon site.
et j'ai remarqué que l'adresse à changé, c'est maintenant
http://imp2-q.free.fr
au lieu de
http://imp.free.fr/

Alors j'ai fais le changement dans le script, mais pas de mail; peut qu'il y a eu d'autres changements?

serait t'il possible d'avoir une mise à jour pour le plaisir de tous.
Moi je suis fan de ton script.
cs_Natim Messages postés 24 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 26 juin 2004
4 avril 2004 à 09:59
Merci, ce serais cazrrément simpa !
mmaxuel Messages postés 101 Date d'inscription samedi 13 avril 2002 Statut Membre Dernière intervention 29 avril 2004
3 avril 2004 à 14:57
ok en fait tu voudrais faire un formulaire de mail avec pieces jointes???

je peux essayer de te faire peut etre pour lundi...
cs_Natim Messages postés 24 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 26 juin 2004
3 avril 2004 à 14:37
Le problème est que le script renvoie ".... n'est pas un fichier valide" sauf quand le fichier est sur le serveur exemple dans le même repertoire que le script.
Je suis donc en train de faire une fonction qui upload la pièce jointe sur le serveur, puis l'envoie avec cette fonction et ensuite supprime le fichier créé
C'est ça que je cherche si qqun l'a déjà fait
Merci de ta rapide réponse peut-être que la précedente été mal formulée
++
Natim
http://www.eeudf-belfort.clan.st
mmaxuel Messages postés 101 Date d'inscription samedi 13 avril 2002 Statut Membre Dernière intervention 29 avril 2004
3 avril 2004 à 08:41
la fonction permet d'envoyer n'importe quelle pieces jointes... par contre qu'une seul....

tant que le script ne renvoie pas ".... n'est pas un fichier valide" c'est que le fichier a ete accepter...

faite un test en vous envoyant votre propre mail pour voir si la piece jointes passe bien...

voila j'espere avoir repondu correctement.

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.