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
25 nov. 2004 à 21:18
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.
4 avril 2004 à 09:59
3 avril 2004 à 14:57
je peux essayer de te faire peut etre pour lundi...
3 avril 2004 à 14:37
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
3 avril 2004 à 08:41
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.