OVH Cloud OVH Cloud

Mail a mes adherents...question de style...

2 réponses
Avatar
Yves Le Dain
Bonjour,

j'envoie tout bêtement un mail à tous mes adhérents dont la liste figure
dans une base mysql.

Aucune difficulté pour cet exercice, dans mon script PHP je fais un

SELECT mail FROM ma_table

puis une boucle pour envoyer le mail à chaque membre.

Trois questions de style cependant :

- Est-ce la bonne méthode de charger en une fois toute la base mysql ? a
partir de combien de lignes dans la table (10, 500, 10000 ?) vaut-il mieux
faire plusieurs séries de SELECT avec un argument LIMIT ?

- Si j'ai bien tout compris un script PHP s'arrête automatiquement après 30
secondes d'execution...y-a-t-il un risque que le programme mette plus de 30
secondes à envoyer les mails et s'arrête en cours de traitement ? comment
gérer ce problème ?

- Une fois le script démarré je peux fermer la fenêtre de mon navigateur
avant la fin du traitement ou alors le script s'arrête ? (normalement le
script renvoi au navigateur l'adresse mail de l'adhérent au fur et à mesure
de la boucle qui envoie le mail)

Merci par avance...

2 réponses

Avatar
Marc

- Est-ce la bonne méthode de charger en une fois toute la base mysql ? a
partir de combien de lignes dans la table (10, 500, 10000 ?) vaut-il mieux
faire plusieurs séries de SELECT avec un argument LIMIT ?


pas de limite, sinon de memoire et de temps d'execution.

- Si j'ai bien tout compris un script PHP s'arrête automatiquement après 30
secondes d'execution...y-a-t-il un risque que le programme mette plus de 30
secondes à envoyer les mails et s'arrête en cours de traitement ? comment
gérer ce problème ?


- positionner les limite plus hautes,
- lancer un script en tache de fond, via un exec, fork ou system. (php ... mon script.php)

- Une fois le script démarré je peux fermer la fenêtre de mon navigateur
avant la fin du traitement ou alors le script s'arrête ? (normalement le
script renvoi au navigateur l'adresse mail de l'adhérent au fur et à mesure
de la boucle qui envoie le mail)


navigateur fermé = script arrété. Il y a possiblité de continuer en
s'enregistrant (voir liens sur le fonction exit())

Avatar
fbarbenoire
Marc wrote in message news:<3f34a7d6$0$16546$...

- Est-ce la bonne méthode de charger en une fois toute la base mysql ? a
partir de combien de lignes dans la table (10, 500, 10000 ?) vaut-il mieux
faire plusieurs séries de SELECT avec un argument LIMIT ?


pas de limite, sinon de memoire et de temps d'execution.

- Si j'ai bien tout compris un script PHP s'arrête automatiquement après 30
secondes d'execution...y-a-t-il un risque que le programme mette plus de 30
secondes à envoyer les mails et s'arrête en cours de traitement ? comment
gérer ce problème ?


- positionner les limite plus hautes,
- lancer un script en tache de fond, via un exec, fork ou system. (php ... mon script.php)

- Une fois le script démarré je peux fermer la fenêtre de mon navigateur
avant la fin du traitement ou alors le script s'arrête ? (normalement le
script renvoi au navigateur l'adresse mail de l'adhérent au fur et à mesure
de la boucle qui envoie le mail)


navigateur fermé = script arrété. Il y a possiblité de continuer en
s'enregistrant (voir liens sur le fonction exit())


Bonjour,

j'ai le même type de problème que Yves: pouvoir envoyer des emails à
des abonnés à une liste de diffusion sans que cela soit pénalisant
d'un point de vue temps d'exécution.

En effet, sur le serveur où mon site est hébergé, je n'ai pas accès à
crontab, donc impossible de lancer des tâches périodiques. Pas de
possibilité non plus de paramètrer le temps maximal d'exécution d'un
script. Le seul moyen que j'ai trouvé est d'exécuter le script d'envoi
de mails à chaque fois que quelqu'un charge une page de mon site.

Pour palier tous ces inconvients, le solution suivante que j'ai
trouvée sans un script "tout prêt" est-elle satisfaisante ?
Cette solution consiste à appeler la fonction mail() de php une seul
fois sans destinataire principal mais avec tous les emails des
destinataires dans le champ "Bcc" de l'en-tête. Avantages: un seul
appel à mail() de php, tous les mails sont cachés aux destinataires,
c'est sendmail qui s'occupe d'envoyer tous les mails en décortiquant
l'en-tête. Inconvénients: voir les questions ci-dessous.

Deux questions cependant me titillent:
1) est-ce que mail() rend la main à la fin de l'envoi de tous les
messages ou une fois la requête transmise à sendmail ?
2) y a-t-il une limite dans le nombre d'emails dans Bcc ?

$to = ""; //destinataire vide
$sujet = "sujet";
$msg = "message";
$entete = ...; //c'est pas du php !
$entete .= "Bcc: , , ...";
//derniere ligne sans n !
$ok = mail( $to, $sujet, $msg, $entete);

Merci pour vos remarques, suggestions.

Franck Barbenoire