Fonction mail() ne fonctionne pas correctement (free.fr)

Fermé
Elfe007 Messages postés 32 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 27 mai 2014 - 3 févr. 2013 à 18:06
 sdfsdf - 24 avril 2014 à 00:27
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


A voir également:

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
Elfe007 Messages postés 32 Date d'inscription dimanche 3 avril 2011 Statut Membre Dernière intervention 27 mai 2014 3
14 mai 2013 à 21:01
Ah c'est très ingénieux ! Et ça fonctionne ?
Si oui, pourrais-tu nous dire comment tu fais (je ne maîtrise pas les durées) ?
0
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.
0