Envoi d'une newsletter

Envoi d'une newsletter - PHP - Programmation

Marsh Posté le 11-09-2006 à 08:40:58    

Salut,
 
J'ai développée une newsletter que j'envoi à ses participants en faisant une boucle autour de la fonction mail(). Il y a donc un mail qui est envoyé par destinataire.
 
Tout marchait bien mais depuis, environ xx personnes se sont inscrites. A chaque fois que j'exécute le script, les mails sont envoyés en plusieurs exemplaires comme si l'exécution du script était interrompue et recommençait depuis le début ou comme si le serveur de mail (qmail sur un dédié) s'emballait.
 
Que faire ? J'ai songé à supprimer la boucle autour de la fonction mail() et envoyer qu'un mail avec les adresses de tous les inscrits en CCI. Le problème c'est que ma newsletter soit identifiée comme SPAM par un antispam puisque le mail du destinataire n'apparaitra pas dans le champ TO.
 
Merci d'avance pour votre aide.


---------------
Marquis
Reply

Marsh Posté le 11-09-2006 à 08:40:58   

Reply

Marsh Posté le 11-09-2006 à 08:48:47    

Il nous faut le code.

Reply

Marsh Posté le 11-09-2006 à 09:25:41    

Code :
  1. while($row = mysql_fetch_row($result)) {
  2. mail($row[0], "Newsletter du $date_hier", $message, $headers);
  3. }


---------------
Marquis
Reply

Marsh Posté le 11-09-2006 à 10:16:57    

Laisse l'envoi en TO, c'est nettement plus propre. Le code est assez faible : en cas de terminaison inattendue, comment savoir d'où il faut reprendre?
 
Comment exécutes-tu le code ? Valeur de retour ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 11-09-2006 à 10:19:34    

J'exécute le code par CRON. Il n'y a aucun controle pour savoir si ca s'est bien exécuté et savoir où il y a eu une éventuelle terminaison. Je sais c'est pas bien...


---------------
Marquis
Reply

Marsh Posté le 11-09-2006 à 10:36:01    

et si tu mettais ta liste des membres, avec leurs Emails, dans un fichier txt... que tu efface au fur et a mesure des envois... et que tu remet à jour lors d'une nouvelle news ? (+ un fichier de log pour remonter les erreurs)
 
ou alors dans ton fichier texte tu claque un tableau, avec comme deuxième colonne, la validation de l'envois de la news ?? ou l'erreur d'envois. Au moins si tu as une erreur tu peux remonter l'infos.

Reply

Marsh Posté le 11-09-2006 à 10:42:36    

Si c'est le même message pour tout le monde, pourquoi tu n'enverrais pas un seul mail avec tous les destinataires en bcc?
ça t'eviterai ta boucle [:spamafote]

Reply

Marsh Posté le 11-09-2006 à 10:57:55    

anapajari a écrit :

Si c'est le même message pour tout le monde, pourquoi tu n'enverrais pas un seul mail avec tous les destinataires en bcc?
ça t'eviterai ta boucle [:spamafote]


 :non:  
 
1°- Ca fait pas propre chez le récipient (non personnalisé);
2°- Risque élevé d'être marqué comme SPAM, à juste titre;
3°- Gênant pour le récipient qui utilise un nom de domaine avec des adresses différentes sur la même boîte (geek inside);
4°- Nb de récipients CC ou BCC Pas illimité.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 11-09-2006 à 14:07:29    

Chani_t
Ca m'a l'air d'etre une belle usine à gaz ta solution. Pas plus simple ?
 
anapajari
même réponse que sircam
 
Comment c'est géré par les gros script ?


---------------
Marquis
Reply

Marsh Posté le 11-09-2006 à 14:18:33    

marquis a écrit :

Chani_t
Ca m'a l'air d'etre une belle usine à gaz ta solution. Pas plus simple ?


 
Bof.. je ne vois pas trop en quoi...
 
1 fonction avant la boucle qui regarde si le fichier listant les utilisateurs existe, et si c'est le cas, il regarde ou il en est et replace l'index au bon endroit.
1 fonction dans la boucle pour remettre à jour le fichier et pour enregistrer les log d'erreur..  
 
M'enfin aprés tu peux faire ça avec la base de données, mais bon ça t'oblige à faire un requête à chaque itération.

Reply

Marsh Posté le 11-09-2006 à 14:18:33   

Reply

Marsh Posté le 11-09-2006 à 14:23:48    

Cette méthode me fait penser à une vieille bagnole qu'on essaye de faire marcher à coup de pied dans le Q. :)
 
Il n'y aurait pas un time out à modifier qq part plutot ?


---------------
Marquis
Reply

Marsh Posté le 11-09-2006 à 14:32:23    


 :pfff:  

sircam a écrit :

1°- Ca fait pas propre chez le récipient (non personnalisé);


la notion de propreté sur un mail est toute relative

sircam a écrit :

2°- Risque élevé d'être marqué comme SPAM, à juste titre;


Que tu envoies 100 mails sur 100 adresses d'un même domaine, ou 1 mail à 100 adresses d'un même domaine, le risque d'être marqué "spammeur" est à peu près identique

sircam a écrit :

3°- Gênant pour le récipient qui utilise un nom de domaine avec des adresses différentes sur la même boîte (geek inside);


Euh ... pourquoi???

sircam a écrit :

4°- Nb de récipients CC ou BCC Pas illimité.


A ce moment là tu les coupes au nombre maxi...
 
Mais quoi qu'il arrive si tu dois envoyer 10.000 mails un par un, clairement tu vas avoir du mal.
Il est configuré à combien dans ton php.ini le max execution time?

Message cité 1 fois
Message édité par anapajari le 11-09-2006 à 14:32:59
Reply

Marsh Posté le 11-09-2006 à 21:28:15    

Il est configuré à 30 secondes.


---------------
Marquis
Reply

Marsh Posté le 12-09-2006 à 09:19:14    

et ça te parait suffisant pour XX mails?

Reply

Marsh Posté le 12-09-2006 à 09:35:03    

c'est à vous que je pose la question...


---------------
Marquis
Reply

Marsh Posté le 12-09-2006 à 11:14:49    

Bah tu fais du traitement par lots!


Message édité par dwogsi le 12-09-2006 à 11:15:15
Reply

Marsh Posté le 12-09-2006 à 11:22:01    

et ?


---------------
Marquis
Reply

Marsh Posté le 12-09-2006 à 12:33:22    

marquis a écrit :

c'est à vous que je pose la question...


si t'as 10 personnes oui et sinon non ... Mais vu les détails que tu donnes s'pas facile hein :/

Reply

Marsh Posté le 12-09-2006 à 12:36:13    

il y a plus de 1000 personnes. Vous me conseillez d'augmenter le timeout à combien ?


---------------
Marquis
Reply

Marsh Posté le 12-09-2006 à 13:25:48    

anapajari a écrit :

:pfff:  
 
la notion de propreté sur un mail est toute relative
 
Que tu envoies 100 mails sur 100 adresses d'un même domaine, ou 1 mail à 100 adresses d'un même domaine, le risque d'être marqué "spammeur" est à peu près identique
 
Euh ... pourquoi???
 
A ce moment là tu les coupes au nombre maxi...
 
Mais quoi qu'il arrive si tu dois envoyer 10.000 mails un par un, clairement tu vas avoir du mal.
Il est configuré à combien dans ton php.ini le max execution time?


1°- A choisir entre un courrier adressé à mon nom et un toute boîte... Un email d'aspect professionnel et personnalisé comprendra un FROM légitime et un TO. Comme dans la vraie vie [:itm]
 
2°- Un discriminant possible pour le SPAM est l'utilisation du BCC. Si je n'apparais pas dans le TO, alors j'augmente la pondération du critère spam.
 
3°- J'utilise TOUJOURS machin@mon.nom.de.domaine.com, avec "machin" qui peut être microsoft, ldlc, ... soit le nom de la boîte ou du service. J'attends en retour que le courrier me soit adressé à cette adresse, qui aboutit de tte façon sur la même boîte email. Si un BCC est utilisé, le classement automatique échoue, et je dois dire que dans ce cas là, le catch all a plutôt tendance à rediriger vers Trash...
 
Un peu comme dans la vraie vie : si pas destinataire sur enveloppe alors go to poubelle papier. If destinataire mais aspect d'une pub alors vérifier si pas facture else poubelle papier. [:itm]
 
4°- Si c'est pour faire ça, autant ne pas le faire et envoyer 1 mail par destinataire. [:spamafote]
 
Toute la nuance entre une apparence propre, finie et professionnelle et... le reste. La touche en plus, quoi.  [:pingouino]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 12-09-2006 à 13:30:14    

marquis a écrit :

il y a plus de 1000 personnes. Vous me conseillez d'augmenter le timeout à combien ?


regarde combien de temps il faut pour en envoyer 10, multiplie par 100 [:spamafote]

Reply

Marsh Posté le 12-09-2006 à 13:42:14    

Mais c'est quoi ce brol à la pé-h-pé ? [:mlc]
 
La durée d'exécution peut varier du simple au centuple avec des appels à des modules externes.
 
Et le nombre d'emails à envoyer peut être appelé à changer.
 
J'espère que tu ne vas pas changer un timeout global pour qu'une fonction donnée puisse passer dans un contexte donné... Enfin, quand je dis j'espère, tu fais comme tu veux [:itm]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 12-09-2006 à 13:52:48    

Tu as peut etre une meilleure solution à me proposer ?


Message édité par marquis le 12-09-2006 à 13:53:02

---------------
Marquis
Reply

Marsh Posté le 12-09-2006 à 14:21:02    

sircam a écrit :

Mais c'est quoi ce brol à la pé-h-pé ? [:mlc]


t'parles de moi la?

sircam a écrit :

La durée d'exécution peut varier du simple au centuple avec des appels à des modules externes.


Si tes modules externes multiplient par 100 le temps d'éxécution d'un de tes scripts, je ne saurais que trop te conseiller de t'en débarasser.

sircam a écrit :

Et le nombre d'emails à envoyer peut être appelé à changer.
J'espère que tu ne vas pas changer un timeout global pour qu'une fonction donnée puisse passer dans un contexte donné... Enfin, quand je dis j'espère, tu fais comme tu veux [:itm]


Etant donné qu'il ne souhaite pas refaire son code, je vois pas trop comment il pourrait faire autrement.  
Maintenant c'est vrai aussi qu'il pourrait choisir une des solutions que tu as proposées ...

Reply

Marsh Posté le 12-09-2006 à 15:19:54    

anapajari a écrit :

1° t'parles de moi la?
 
2° Si tes modules externes multiplient par 100 le temps d'éxécution d'un de tes scripts, je ne saurais que trop te conseiller de t'en débarasser.
 
Etant donné qu'il ne souhaite pas refaire son code, je vois pas trop comment il pourrait faire autrement.  
Maintenant c'est vrai aussi qu'il pourrait choisir une des solutions que tu as proposées ...


1°- j'parle de changer le timeout en fonction de la durée possible du script :o C'est assez aberrant.
 
2°- [:mlc] C'est pas ce que j'ai dit. J'ai dit que l'appel à un module externe peut prendre un temps extrêmement variable, à moins d'être toujours en asynchrone, ce qui n'est pas forcément souhaitable. Ex. : une vérification DNS.
 
3°- Ah oui, ça, c'est un choix [:spamafote]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 17-09-2006 à 08:32:52    

Bon j'ai passé le timeout à 60 sec et rien n'y change. De toute facon ca n'a pas l'air de venir de là car quand j'exécute manuellement la tache CRON dans Webmin, elle met bien plus que 60 secondes à s'exécuter.
 
Mes emails s'envoient toujours en plusieurs exemplaire. Le problème n'est il pas plutot du coté de Qmail ?


---------------
Marquis
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed