A voir également:
- Fonction mail php ne fonctionne pas
- Fonction si et - Guide
- Mail delivery system - Astuces et Solutions
- Publipostage mail - Accueil - Word
- Windows live mail - Télécharger - Mail
- 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.