Fonction mail() ne fonctionne pas correctement (free.fr)
Elfe007
Messages postés
32
Date d'inscription
Statut
Membre
Dernière intervention
-
sdfsdf -
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 :
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
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:
- Fonction mail php ne fonctionne pas
- Fonction si et - Guide
- Mail delivery system - Astuces et Solutions
- Windows live mail - Télécharger - Mail
- Publipostage mail - Accueil - Word
- Comment faire si on a un mail delivery system - Forum Réseaux sociaux
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.
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.
Si oui, pourrais-tu nous dire comment tu fais (je ne maîtrise pas les durées) ?
$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.