Fonction mail() ne fonctionne pas correctement (free.fr) [Fermé]

Signaler
Messages postés
32
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
27 mai 2014
-
 sdfsdf -
Bonjour,
J'ai créé sur mon site (hébergé par free) un formulaire de contact, qui m'envoie par mail l'adresse et le message de la personne qui le remplit :

<?php 
     $headers ='From: '.$_POST['mail'].''."\n"; 
     $headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n"; 

     if(mail('monadresse@gmail.com', '[FORMULAIRE]', ' '.$_POST['message'].' ', $headers)) 
     { 
          Header("Location: contact.php?envoi=reussi");
     } 
     else 
     { 
          Header("Location: contact.php?envoi=echec");
     } 
?>


Le problème : après plusieurs tests, je suis rendu compte que je recevais le formulaire une fois sur 3, ce qui est assez désagréable.
Y aurait-il une solution pour que je reçoive les mails à chaque fois ?
Merci d'avance


20 réponses

Bonjour,
J'ai le même problème avec la fonction mail() qui chez Free fonctionne environ une fois sur 3. J'ai parcouru divers forums sans trouver d'explications convaincantes; chacun y va de son script qui fonctionne. j'en ai essayé plusieurs : oui ils fonctionnent... une fois sur 3 !!
Mon avis : quand un envoi fonctionne une fois et ne fonctionne pas la fois suivante, alors que tout est identique, on peut logiquement en déduire que la différence (car il faut bien que quelque chose ait changé) vient de chez Free (encombrement du serveur ?), et non du script.
Ma solution : Je controle le temps mis pour l'exécution de la fonction mail() : lorsque la fonction n'est pas vraiment exécutée elle met moins d'une milliseconde. (Pourtant elle ne retourne pas de message d'erreur). Quand elle est vraiment exécutée et que le mail est envoyé, elle a mis environ 2,005 secondes.
Donc si le temps d'exécution est inférieur à 2 s, je refais automatiquement une tentative d'envoi après une attente de 2 ou 3 s. Si au bout de 5 tentatives la fonction mail() n'a toujours pas été exécutée, j'interromps la boucle.
8
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Depuis j'ai fait exactement pareil, voici mon code si ça vous intéresse:

$total = 0;
while($total < 1.5) {
$start = date_getMicroTime();
for($i = 0 ; $i < 999999 ; $i++) 1; // Temps de pause entre chaque tentative, car sleep() n'est pas dispo sur Free.fr
mail_contact($name, $email, $subject, $message); // Vrai fonction qui envoi le mail
$total = round(date_getMicroTime() - $start, 3);
}


Et la fonction:

function date_getMicroTime() {
list($usec, $sec) = explode(' ', microtime());
return ((float) $usec + (float) $sec);
}


En espérant que ça vous dépannera.
Messages postés
32
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
27 mai 2014
3
Merci beaucoup !!! Fonctionne parfaitement ! 5 mails envoyés sur 5 tests !
Attention, avec le script donné par Anthony le 14/05/2013, si la fonction mail() ne fonctionne pas dutout, on tourne indéfiniment dans la boucle While.

$tentative = 0;
$envoi = 0;
While ($tentative < 5 AND $envoi == 0){ // 5 tentatives autorisées
$tentative++ ;
$t0 = microtime_float();
$reponse = mail($destinataire,$objet,$message,$entete);
$t1 = microtime_float();
$duree = $t1-$t0;
if($reponse == 1 AND $duree > 1.50){$envoi = 1;}
else{$envoi = 0;
$pause = 0;
while ($pause < 2.00){ // Ne pas descendre plus bas que 2s : moins bons résultats
$t2 = microtime_float();
$pause = $t2-$t1;
}
}
//echo "tentative ".$tentative.", envoi = ".$envoi.", durée : ".round($duree,3)."<br />";
}
if($envoi==1){echo "mail envoyé";}else{echo " le mail n'a pu être envoyé, réessayez !";}


function microtime_float(){list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);}
Non, car le temps d'exécution d'un script PHP sur Free.fr est limité.
j'ai le même problème je reçois un mail sur 3 voire après plus et hop ça remarche ! où doit on mettre ce code donné plus haut Anthony ? je suis débutante et je ne comprends pas tout mais ça fait 3 semaines que j'essaie et que ça ne fonctionne pas ! merci d'avance ;)
Messages postés
6058
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
21 avril 2021
1 403
Bonsoir,

C'est étonnant que tu reçoives des mails, car la fonction mail() de Free n'accepte pas d'autre adresse mail que celle liée au compte, par exemple pour http://toto.free.fr, la seule adresse mail acceptée est toto@free.fr
Messages postés
32
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
27 mai 2014
3
Donc en mettant mon adresse free en destinataire ça devrait mieux fonctionner ?
Messages postés
6058
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
21 avril 2021
1 403
En principe, oui.
Messages postés
32
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
27 mai 2014
3
Au début j'avais l'impression que ça fonctionnait mieux, mais finalement ce n'était que de la chance : ça ne va pas mieux
Messages postés
1
Date d'inscription
dimanche 24 février 2013
Statut
Membre
Dernière intervention
24 février 2013

Bonsoir,
j'ai le même problème avec des mails qui ne sont pas envoyés systématiquement. Après avoir regardé https://www.php.net/manual/fr/function.mail.php je me suis dit que mon message était peut-être trop long. J'ai utilisé wrdwrap(), mais cela n'a rien changé. J'ai également essayer CRLF ou LF pour les changements de ligne, mais rien n'y fait. Html ou texte brut ne fait rien plus, tout comme le changement de charset ou l'utilisation d'une autre adresse mail de destination. C'est à croire que le serveur free exécute la fonction mail() de façon aléatoire. Peut-être l'erreur vient-elle de moi (c'est pourquoi je joins mon code), mais le nombre de jours que je viens de passer sur cette seule fonction me fait clairement pencher pour un blocage côté serveur. Si quelqu'un a une idée pour modifier ce code (proche de celui de "Elfe007", c'est pourquoi j'ajoute mon post ici) ou confirmer le fonctionnement aléatoire de la fonction mail() chez free, je suis également preneur.

$headerscopie = 'From: moi@free.fr'."\n"; 
$headerscopie .= 'MIME-Version: 1.0'."\n"; 
$headerscopie .= 'Content-type: text/plain; charset=UTF-8'."\n"; 
$subject = "Question posée sur le site"; 
$bodytextebrut = "$nom\n\nvotre question a bien été envoyée. Un document nommé $nomfichier est joint à la question\n"; 
        
mail('moi@free.fr', $subject, $bodytextebrut, $headerscopie);
Y'a pas mal d'info là :
http://les.pages.perso.chez.free.fr/index.php?post/2007/06/19/Lart-et-la-maniere-denvoyer-des-mails-depuis-les-pages-perso-de-Free
Bonjour,

J'ai le meme probleme, je pense aussi que c'est le serveur de free qui pose probleme.

Cela fonctionnait tres bien jusqu'a il y a quelques mois...
Même problème pour moi c'est assez embêtant surtout qu'on ne peut pas envoyer des mails depuis un autre serveur, du coup on est un peu bloqué...
Toujours pas d'amelioration, je ne me suis pas encore penche sur le debugage...
Messages postés
6058
Date d'inscription
mercredi 19 janvier 2005
Statut
Contributeur
Dernière intervention
21 avril 2021
1 403
C'est vrai que depuis quelques temps, il y a des problèmes chez Free. Je reçois encore des mails via le formulaire de contact de mon site, mais quand je le teste, moins de la moitié me parvient.
J'avais la flemme de mettre en place ce hack car j'avais aussi remarque la difference de temps, maintenant c'est fait!
c'est pas beau cette tempo mais je pense aussi que c'est la seule solution pour l'instant...
Bonjour,

Etant actuellement en train de créer un nouveau site, je viens de me rendre compte qu'effectivement la fonction mail() est devenue capricieuse avec Free.

Du coup, je m'inquiète de savoir depuis quand celle-ci ne fonctionne plus car je l'utilise également sur un autre site.

Je me suis donc permise d'utiliser le code proposé et miracle, cela fonctionne! Mais j'ai encore quelques soucis :

- Parfois, cela fonctionne très bien et je reçois le mail mais d'autres fois, le mail m'est envoyé 5 ou 6 fois ...
- Et dans tous les cas, que le mail ait été envoyé 1 ou 5 fois, après avoir valider le formulaire de contact, je me retrouve avec un joli message "Impossible d'afficher la page".

Quelqu'un aurait-il une idée ?

Merci d'avance
Messages postés
1
Date d'inscription
mercredi 22 mai 2013
Statut
Membre
Dernière intervention
22 mai 2013

MERCI MERCI MERCI
à Philout2 je cherchais une solution depuis plusieurs semaines
et celle ci fonctionne parfaitement
Bonjour,

j'ai essayé de nombreuses solutions.
La seule qui fonctionne :
voir la réponse de Philout2 - 16 mai 2013 à 20:36

nota : de temps en temps un doublon de mail reçu.

Merci à Philout2
Géryko
Messages postés
4
Date d'inscription
mardi 3 septembre 2013
Statut
Membre
Dernière intervention
5 septembre 2013

Bonjour,
J'ai également remarqué que le traitement du message était lié à la durée de transmission.
J'ai donc essayé de m'approprier le script de Philout2, mais je ne parviens pas à l'incérer correctement dans mon propre script (site développé avec OpenElement).
Je peux éventuellement vous communiquer le script que j'utilise actuellement.
Sachant que je ne suis pas très doué, quelqu'un peut-il m'aider.
D'avance merci.
Bonjour Rembuche,

OK
envoyez-moi vos coordonnées en me laissant un message sur mon site
http://geryko.free.fr ("me laisser un message")
Je verrai ce que je peux faire.

Nota : (site développé avec OpenElement) : je ne connais pas.

Cordialement
Géryko
Messages postés
4
Date d'inscription
mardi 3 septembre 2013
Statut
Membre
Dernière intervention
5 septembre 2013

Bonjour Geryko,
Comme proposé, je vous ai adressé un message sur votre site.
Merci.
Cordialement.
Il n'y a pas de message déposé sur mon site.
à Rembuche,

Je ne vois pas le message, recommencer svp.
Messages postés
4
Date d'inscription
mardi 3 septembre 2013
Statut
Membre
Dernière intervention
5 septembre 2013

Bonjour gériko,
Nouvel envoi ce matin.
Cordialement.
Bonjour Rembuche,

Toujours pas de message enregistré !

1) votre message devrait enregistré, visible par tout le monde, numéroté et
porter un N° de l'ordre de 74/75. Il n'est pas là ????
2) Vous n'avez peut-être pas entré le code antispam et le javascript de votre PC
est bloqué ?
3) Cet après midi j'ai fait un test sur un autre PC, depuis Paris. RAS
4) je peux améliorer le point 2) mais avant tout, je veux savoir ce qui se passe.
5) recommencer svp.
6) En plus, solution de repli :
Voir dans le milieu de ma page d'accueil, il y a mes coordonnées.
cordialement
Géryko
Messages postés
4
Date d'inscription
mardi 3 septembre 2013
Statut
Membre
Dernière intervention
5 septembre 2013

Re bonjour Géryko,
J'ai compris, je vous ai adressé le message sur votre autre adresse mail microfer.
Là, je viens de passer par le formulare de votre site, mais je ne parviens pas à vous adresser mon message. (problème de chiffres anti-spam ??)
Merci de vos messages.
Cordialement
Merci beaucoup Philout2 pour ta solution, j'ai enfin un site mail que les membres vont pouvoir utiliser, vu qu'ils reçoivent leur mot de passe par mail ! Je l'ai testé ce soir et cela semble fonctionner correctement !

Denis
Messages postés
1
Date d'inscription
jeudi 27 mars 2014
Statut
Membre
Dernière intervention
27 mars 2014

je reactive ce sujet car j'ai un comportement curieux et tres genant pour mon projet! avec la manip decrite par le genial PHILOUT de mai2013, j'ai appliqué la mesure de temps de reaction suite a la fonction mail() et tout marche bien, a condition d'activer le script php depuis la page perso : je m'explique
je met le fichier Arduino_notif.php qui contient la fonction mail () et tout le toutim de verif de tempo et qd je clique via explorer sur le lien a ce fichier, tout marche nickel... en moyenne, j'ai 2.00xxx sec de reaction...apres 3 tentatives...

qd j'essaye d'activer le fichier depuis une requete GET envoyé depuis un arduino (microcontrolleur connecté via internet), le fichier est bien activé mais le temps mesuré passe a 0,5 sec... ds le meilleur des cas et en plus j'ai un warning comme quoi le code es tincorrect : or le code n'a pas bougé...
y aurait il une reaction differente selon que le client connecté (arduino donc ou explorer dans l'autre cas) est different ? ça dépasse un peu mes connaissances en ce domaine...
ci joint une copie des remontée de free vers l'arduino (en mode reception de caracteres donc erreur possible de formattage...)


** GESTION notif PHP **
connected
HTTP/1.1 200 OK
Date: Thu, 27 Mar 2014 15:10:36 GMT
Server: Apache/ProXad [Apr 20 2012 15:06:05]
X-Powered-By: PHP/4.4.3-dev
Connection: close
Content-Type: text/html

coupure de courant intervenue ...
à :16:10 le 2014-03-27
<br/>reponse= 1<br/><br/>tentative 1, envoi = 0, durée : 0.0006<br/><br />
<b>Warning</b>: mail() [<a href='function.mail'>function.mail</a>]: ligne incorrect dans process_login!
in <b>/mnt/104/sdb/b/5/test2561/Arduino_notif.php</b> on line <b>44</b><br />
<br/>reponse= 1<br/><br/>tentative 2, envoi = 0, durée : 0.6274<br/><br/>reponse= 1<br/><br/>tentative 3, envoi = 0, durée : 0.0006<br/><br />
<b>Warning</b>: mail() [<a href='function.mail'>function.mail</a>]: ligne incorrect dans process_login!
in <b>/mnt/104/sdb/b/5/test2561/Arduino_notif.php</b> on line <b>44</b><br />
<br/>reponse= 1<br/><br/>tentative 4, envoi = 0, durée : 0.5875<br/><br/>reponse= 1<br/><br/>tentative 5, envoi = 0, durée : 0.0006<br/><br/>reponse= 1<br/><br/>tentative 6, envoi = 0, durée : 0.0006<br/> le mail n'a pu être envoyé, réessayez !
disconnecting.

si quelqu'un a une idée quelconque de la direction où chercher...
entete a revoir ? code php a adapter... temps de reaction de l'arduino trop lent par rapport a explorer ???
merci pour votre aide !!!
Messages postés
2
Date d'inscription
samedi 5 avril 2014
Statut
Membre
Dernière intervention
5 avril 2014

Tout ça me dépasse. Je vais enlever mon formulaire. Tant pis.
ce forum n'aporte pas de solution, il doit etre supprimé