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:36Cette 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);}
?>