mamac

envois de mail aleatoire avec la fonction mail()
« le: 08 March 2013 17:32:07 »
Bonjour,

J'utlise depuis plusieurs annees les pages perso free pour heberger le site du Syndic de mon immeuble.
J'utilise la fonction mail() pour envoyer des mails aux coproprietaires.

Depuis quelques mois, sachant que je n'ai rien change au code, les mail sont envoyes de facon aleatoire, environ 1 mail sur 3 est envoye, la fonction mail() ne genere pas d'erreur.

Je n'arrive pas a trouver ce qui peux declencher un tel comportement, le probleme semble venir du serveur qui gere cette fonction.

Quelqu'un a-t-il des infos voir une solution ou alternative?

Merci

neotenien

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #1 le: 28 March 2013 14:40:37 »
Salut

J'ai posté un message avec le même genre de problème, mais lié au fait que j'utilise PHP5 dans les pages perso du site internet ayant ce problème... N'aurais-tu pas fait de même ? C'est à dire activé PHP5 pour les pages persos ?

S'il s'avère que PHP5 ne peut gérer la fonction mail, je me pencherai vers une fonction plus élaborée...

DGirro

Bonjour,

Pour l'envois de mail sur les pages persos free le probleme persiste depuis 6 mois je pense !!!!

Le pb ne vient ni de PHP4, ni de PHP 5.
De plus j'ai testé le sample de mamac et le pb est toujours là :
1 fois sur 2 ou 3 la mail n'arrive pas aux destinataires (ni dans la boite spam) !
ET surtout jamais de code d'erreur retour sur l'appel à la fonction mail(), tout est ok...?

Qui d'autre à le pb ? Une idée ?

Pour infos :
j'utilise les infos/recommandations suivantes :

Pas plus de 2 000 mails envoyés / semaine (cela inclut les tentatives de spam, les flood, les messages non remis…

si les formulaires ne sont pas correctement configurés et protégés cela peut aller vite) ; message d'erreur du genre : Warning: mail() [function.mail]: Quota mail atteint… ;

Pas plus de 20 destinataires et/ou appels de la fonction mail par exécution de script PHP ; message d'erreur du genre : Warning: mail() [function.mail]: Trop de destinataires, vous êtes suspendu. ;

La valeur du From: doit être l'email du compte depuis lequel est envoyé l'email ;

Système de détection de SPAM ; message d'erreur du genre : Warning: mail() [function.mail]: SPAM détecté. ;

Pas (ou peu) de pièces jointes ;

Ne pas inclure de contenus pouvant être assimilés à du spam (nombreux liens…) ;

Pas d'envois trop rapprochés ;

Pas d'envois trop fréquents au(x) même(s) destinataire(s) ;

Ne spécifiez pas tous les en-têtes, uniquement les principaux (cf. le code d'exemple en bas de page) car, si vous écrasez les en-têtes automatiquement insérés par les serveurs d'envoi par les vôtres, il y a de grandes chances que l'email ne passe pas, alors que la fonction mail() était bien codée, le contenu et le format correct, et que l'exécuteur PHP à bien remis l'email au serveur perso1, en charge des envois depuis les PP ;
Format mime text/plain ou multipart (text/html + text/plain), n'envoyez jamais de courriel au format text/html uniquement ; le jeu de caractères doit être us-ascii, iso-8859-1, iso-8859-15.

DGirro

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #3 le: 04 April 2013 13:25:26 »
hello,
instruction mail php tjs KO, personne n'a le pb ? Comme décrit ci-dessus...
merci d'avacnce



sebaudrain

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #4 le: 04 April 2013 14:55:23 »
Bonjour,

J'ai aussi ce problème.
Personne n'a d'information quant à la résolution de celui-ci ?

Merci.

geryko

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #5 le: 30 August 2013 17:42:58 »
Bonjour,
J'ai le même problème et impossible de m'en sortir.
L'envoi de mail avec la fonction mail(...) est aléatoire et non fiable.
J'en reçois 1 ou 2 sur 10 environ. Donc inexploitable sérieusement.

Je recherche une solution depuis 3 semaines.
J'ai fait de nombreux essais et tests en m'inspirant des forums que j'ai trouvés
mais sans succès.
Même FREE ne répond pas correctement. Il me dit de consulter php manuel.....
Avez-vous trouvé une solution ?
'
Si l'un de vous a la solution j'espère qu'il voudra bien la partager.
Bien à vous
Géryko

Nota: Sur AUDF j'ai également expliqué mon cas que vous pourrez voir (pages perso
 le 22/08/2013) mais aucune réponse.    Le sujet est tabou ?

geryko

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #6 le: 31 August 2013 13:49:08 »
bonjour,
Depuis hier soir, je pense avoir trouvé une configuration qui fonctionne.
Laissez moi un peu de temps pour nettoyer mon code et faire des tests
supplémentaires.
Depuis hier, sur une vingtaine d'envois, 100% de réussite.


geryko

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #7 le: 31 August 2013 22:06:02 »
Bonsoir,

Ma situation :
Je suis retraité, je n'ai rien à vendre, je ne fais que m'amuser.
J'ai un site sur ovh qui fonctionne très bien avec la fonction mail() php4.
A titre d'expérience, (pour voir) je l'ai installé sur FREE (pages perso) et là, le fonctionnement de la fonction mail()
s'est révélé aléatoire, (bon 1 fois sur 5 environ.)
Mes nombreux essais m'ont conduit à tester une proposition vue sur un forum qui consistait à mesurer le temps
de réponse à la fonction mail(). (toujours True) et d'en déduire une émission réussie.
Cette technique n'était pas fiable non plus. J'ai réussi à lui faire dire "message envoyé" alors qu'il n'en était rien.
Après des jours de recherche, j'ai finalement testé une fonction trouvée sur un forum qui semble fonctionner.
Je n'ai donc rien inventé. Mes excuses auprès de l'auteur, que je n'arrive plus à le retrouver.

ajout du 04/09/2013 j'ai retrouvé l'auteur
 sur http://www.commentcamarche.net/forum/affich-27060090-fonction-mail-ne-fonctionne-pas-correctement-free-fr
voir la réponse de   Philout2 - 16 mai 2013 à 20:36


Cette fonction mesure également le temps de réponse de la fonction mail() mais en cas d'échec elle recommence
une nouvelle fois (5 fois maxi).
Etant basée sur le même principe que mon test précédent, je n'y croyais pas trop mais le résultat est là.
Nota :
1) sur 40 tests d'émission, 100% de réussite
2) j'ai même eu 2 fois une émission double. (sur la fonction, il faudrait peut-être réduire le temps "$duree > 1.50" ?
3) les émissions ont lieu au 1er coup ou au 2ème coup en général. J'ai vu un seul cas où 4 tentatives ont été nécessaires.
4) il faudrait encore augmenter le nombre d'essais pour obtenir une bonne statistique.
5) Malgré tout, je considère que cela est du bricolage.
'
cordialement
Géryko
'
Ci-dessous, un extrait de ma configuration qui fonctionne.

<?php         //  3 cas d'envoi automatique.  Ici cas 1
function envoyer_lettre($email,$from_email) {   // au visiteur du site
   $objet = "Votre visite du site geryko/free";
   $to = $email;                        //  $email = adresse du visiteur vérifiée par ailleurs
    $message=fread(fopen("./pages/lettre_de_confirmation.txt","r"),filesize("./pages/lettre_de_confirmation.txt"));   

   envoi_mail($to,$objet,$message,$from_email);    // envoi du message via une autre fonction
}
?>

<?php         //  3 cas d'envoi automatique.  Ici cas 2
function envoyer_droits_dacces($email,$from_email,$mon_host) {   // au visiteur du site
   $objet = "Site geryko/free  Entree des artistes.";         // accent à voir ??
   $to = $email;                                    // $email =

adresse du visiteur vérifiée par ailleurs
    $message=fread(fopen("../pages/lettre_demande_dacces.txt","r"),filesize("../pages/lettre_demande_dacces.txt"));
   
   envoi_mail($to,$objet,$message,$from_email);    // envoi du message via une autre fonction
}
?>

<?php         //  3 cas d'envoi automatique.  Ici cas 3
function avis_de_message($message,$email,$mon_email,$from_email) {  // dans ma propre B à L
   $objet = 'Visite du site geryko/free ' ;
   $to = $mon_email;               // $mon_email = mon adresse  lue dans config.inc.php
   if (!empty ($email)) {           // Vérification si  l'adresse email du visiteur est présente
      $objet =   $objet . ' par '. $email;
   }
   else {
      $objet =  $objet . ' par un anonyme.';
   }
      $message= stripslashes($message); //  On enlève les antislashes (ex : j\'ai)
   envoi_mail($to,$objet,$message,$from_email);    // envoi du message via une autre fonction
}
?>

<?php 
function envoi_mail($to,$objet,$message,$from_email)   {  // trouvée  sur un forum mais je ne sais plus où.  Mes excuses auprès de l'auteur.
      // ces 3 lignes ci-dessous ont été ajoutées pour mon cas personnel.
      $additional_headers = "$from_email\r\n";   // ( $from_email = From: [email protected]  Une adresse non valide volontairement, lue dans

config.inc.php)
      $additional_headers .= "MIME-Version: 1.0\r\n";
      $additional_headers .= 'Content-type: text/plain; charset=iso-8859-1' . "\r\n"; // ou charset=iso-8859-15  à voir ??

   $tentative = 0;
   $envoi = 0;
   While ($tentative < 5 AND $envoi == 0){       // 5 tentatives autorisées
   $tentative++ ;
   $t0 = microtime_float();
   $reponse = mail($to,$objet,$message,$additional_headers);    // on envoie
   $t1 = microtime_float();
   $duree = $t1-$t0;                                 // on calcule la durée
   if($reponse == 1 AND $duree > 1.50){$envoi = 1;}         // on considère que cest OK
   else{$envoi = 0;                                 // sinon ...
   $pause = 0;
   while ($pause < 2.00){                      // Ne pas descendre plus bas que 2s : moins bons résultats
   $t2 = microtime_float();                  // On attend un petit moment avant de recommencer une autre tentative
   $pause = $t2-$t1;
}
}
echo "tentative ".$tentative.", envoi = ".$envoi.", durée : ".round($duree,3) ." * "; //."<br />";  le tout sur une seule ligne
}
if($envoi==1){echo " mail envoyé <br />";}else{echo " le mail n'a pu être envoyé ! <br />";}
}
?>

<?php 
function microtime_float(){list($usec, $sec) = explode(" ", microtime());
return ((float)$usec + (float)$sec);}
?>
« Modifié: 04 September 2013 16:28:28 par geryko »

philou35

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #8 le: 27 March 2014 15:46:54 »
je reactive ce sujet car j'ai un comportement curieux et tres genant pour mon projet! avec la manip decrite par le genial bienfaiteur 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 !!!

ci dessous mon code PHP : -------------------------------------------------------------

<?php

// prog php d'envoi de mail via page perso free : maxi autorise 2000 mails/sem
// mail destinataire (pas forcement celui page perso)

$to = "[email protected]";
$mon_pseudo = "Arduino";
$mon_url = "http://monsite.free.fr";
$mon_email = "[email protected]";  // pas forcement celui page perso

 // Subject
$subject = "alerte coupure courant";

// heure et date du serveur free temps GMT -1h
$date1 = date("Y-m-d");    // Y 4 digit, y 2 digit, d jour sur 2 digit sinon J
$heure1 = date("H:i");

 
// Message
// Chaque ligne doit être séparée par un caractère CRLF (\r\n).
// Les lignes ne doivent pas comporter plus de 70 caractères.
 
$msg1 = "coupure de courant intervenue ...\r\n";
$msg2 = "à:".$heure1." le " . $date1."\r\n";
$msg = $msg1.$msg2;

// debug
echo $msg;

// entete du mail : pas la peine de compliquer, free remplace les entetes mais mettre ceux la au moins:
$entete = "From: " . $mon_pseudo . " <" . $mon_email . ">\r\n";   // essayer \n si echec
$entete .= "MIME-Version: 1.0\r\n";

// gestion de l'envoi : free sature et 3 fois sur 4 le mail n'est pas distribué
// pour contrer ce bug, mettre en place la gestion du temps suivante
// si <2 sec le mail n'a pas ete traité : refaire envoi apres 2 sec
// si >2 sec le mail est ok

$tentative = 0;
$envoi = 0;
While ($tentative < 6 AND $envoi == 0){ // 6 tentatives autorisées
$tentative++ ;
$t0 = microtime_float();
$reponse = mail($to,$subject,$msg,$entete);
$t1 = microtime_float();
$duree = $t1-$t0;
 if($reponse == 1 AND $duree > 1.50){$envoi = 1;}
 else{$envoi = 0;
   $pause = 0;
   while ($pause < 3.00){ // Ne pas descendre plus bas que 2s : moins bons résultats
   $t2 = microtime_float();
   $pause = $t2-$t1;
   }
 }
echo "<br/>tentative ".$tentative.", envoi = ".$envoi.", durée : ".round($duree,4)."<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);}

?>

philou35

Re : envois de mail aleatoire avec la fonction mail()
« Réponse #9 le: 28 March 2014 14:40:52 »
le pb est resolu (pour le moment !!)

j'utilisais comme nom de site "Monsite.free.fr" sans pb jusqu'alors mais en remplaçant par "monsite.free.fr", le warning généré par free lors de l'activation du script Arduino_notif.php depuis une requete generée par l'Arduino, et qui utilisait la fonction mail() a disparu : je soupconne un process de controle de la provenance des requetes de la part de Free, ce qui est bien normal...
par contre depuis explorer je n'avais pas de pbs...
j'e deduis que Free devait voir que j'etais connecté sur ma page perso...et que l'appel au script s'effectuait depuis la page perso.

depuis je reçois enfin mes mails et parfois 2 d'un coup !!
le chat peut donc miauler et le chien aboyer maintenant ! youpi !