Envoyer 20 000 mails en 1 seule fois

Envoyer 20 000 mails en 1 seule fois - PHP - Programmation

Marsh Posté le 16-10-2005 à 23:47:17    

bonjour a tous,
 
je souhaite écrire un script qui enverra un mail à 20 000 adresses déjà inscrite dans une table mailing_liste, contenant un champ unique "email"
 
pour chaque enregistrement, je recupere dans une boucle le mail auquel j'envoi le message, mais pour 20 000 adresses je me tape un timeout, forcement. d'autant qu'en utilisant le SMTP de free, mon FAI, je me tape une interdiction d'envoi dès 400 mails envoyés.
 
voici mon code :  

Code :
  1. $req = mysql_query("SELECT email FROM table WHERE email like '%@%' " );
  2. while($tab = mysql_fetch_array($req))
  3. {
  4. $mail_body = "bla bla bla";
  5.  mail($tab[0],$sujet,$mail_body,$opt);
  6. }


 
J'aimerais trouver une combine pour envoyer mes 20 000 mails en une fois sans me taper de timeout...
une idée ??

Message cité 1 fois
Message édité par imcdb le 16-10-2005 à 23:48:05

---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 16-10-2005 à 23:47:17   

Reply

Marsh Posté le 16-10-2005 à 23:51:09    

installe un serveur de mail chez toi  
 
mais forcement, c'est plus compliqué  
 
sinon, c'est pas un peu du spam ?  
 
le serveur apache est il chez toi ou pas ?

Reply

Marsh Posté le 16-10-2005 à 23:55:49    

oui il est chez moi
en fait, je veux tenir informés les gens inscrits sur mon jeu, ceux qui m'ont donné leur mail à cet effet. Donc hors spam, avec evidemment le petit message de desinscription qui va bien ;)


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 16-10-2005 à 23:56:11    

sinon, quel serveur SMTP gratuit me conseillez-vous pour cette charge d'envoi ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 00:07:21    

Reply

Marsh Posté le 17-10-2005 à 00:23:31    

cool... merci pour le lien
question : peux-tu y importer un carnet d'adresses deja constitué ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 11:27:57    

imcdb a écrit :

bonjour a tous,
 
je souhaite écrire un script qui enverra un mail à 20 000 adresses déjà inscrite dans une table mailing_liste, contenant un champ unique "email"
 
pour chaque enregistrement, je recupere dans une boucle le mail auquel j'envoi le message, mais pour 20 000 adresses je me tape un timeout, forcement. d'autant qu'en utilisant le SMTP de free, mon FAI, je me tape une interdiction d'envoi dès 400 mails envoyés.
 
voici mon code :  

Code :
  1. $req = mysql_query("SELECT email FROM table WHERE email like '%@%' " );
  2. while($tab = mysql_fetch_array($req))
  3. {
  4. $mail_body = "bla bla bla";
  5.  mail($tab[0],$sujet,$mail_body,$opt);
  6. }


 
J'aimerais trouver une combine pour envoyer mes 20 000 mails en une fois sans me taper de timeout...
une idée ??


Ah ouais forcément. Dans la doc de PHP, ils expliquent que c'est pas bien de faire ça, vu qu'un socket est ouvert à chaque appel de la fonction mail... Et en mettant dans le premier argument de mail un tableau avec tous les mails, ça marche pas ? [:dawa] (ou plutot en champ Bcc)

Reply

Marsh Posté le 17-10-2005 à 11:32:39    

tu écrirais ca comment ? avec 20 000 mails, c'est pas un peu chaud ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 11:33:41    

Ch'ais pas, faut essayer...

Reply

Marsh Posté le 17-10-2005 à 11:35:36    

récupérer les adresses de la bdd sous forme de tableau, tu ferais comment ?
 

Code :
  1. $req = mysql_query("SELECT email FROM ad_joueurs WHERE email like '%@%' limit $debut, 100" );
  2. echo "mails = array(";
  3. while($tab = mysql_fetch_array($req))
  4. {
  5. echo "'".$tab[0]."',\n";
  6. }
  7. echo " );";


Message édité par imcdb le 17-10-2005 à 11:40:56

---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 11:35:36   

Reply

Marsh Posté le 17-10-2005 à 11:37:05    

Gné ? [:johneh]

Reply

Marsh Posté le 17-10-2005 à 11:41:33    

avec ca j'obtiens
 
mail = array('mail1',...,'mailX');
 
 
auquel je rajoute un $
 
et j'ai mon tableau

Code :
  1. $mails = array('............');


 
Apres, je mets ce tableau en 1er arg dans la commande mail ?


Message édité par imcdb le 17-10-2005 à 11:45:24

---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 11:42:35    

imcdb>
 
Tu vas encore faire disparaître ton topic comme la dernière fois ? [:itm]
 
Après avoir été supsecté par certains de spamming sur ce forum - ce qui est fondé ou pas, je n'en sais rien -, voilà que tu demandes une méthode pour envoyer des emails à la pelle...
 
Hmmm...
 
Tout cela soulève bien des questions.
 
[:pingouino]


Message édité par sircam le 17-10-2005 à 11:42:49

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

Marsh Posté le 17-10-2005 à 11:44:19    


je vois pas en quoi c'est suspect de vouloir envoyer des mails en masses aux joueurs inscrits sur mon jeu  :??:  :??:  
 
faut aps etre parano, non plus  :D  
Quant a l'autre topic, je l'ai viré car ca faisait en effet vraiment pub...


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 12:03:49    

je suppose qu'ne faisant ca
 

Code :
  1. require('addrs.php'); // tableau $addr_mail comprenant les addresses mail
  2. foreach($addr_mail as $mail)
  3. {
  4. mail($mail,"xxxxxx, Test Newsletter","test","From: xxxxx@gmail.com" );
  5. }


 
un nouveau socket est aussi ouvert a chaque envoi de mail, non ?


Message édité par imcdb le 17-10-2005 à 12:04:13

---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 12:07:27    

Enfin bref:
 
- Fais ça impérativement en "local";
- Le code pour envoyer 10 emails est semblable à celui pour en envoyer 1 million;
- Prends du "checkpoints persistents" -> Si ça plante en cours de route, tu ne reprends que là où ça s'est arrêté.
- Une mailing list : heu... Un peu lourd l'admin ML de free pour 20.000 personnes, hein. [:pingouino]
- Clause WHERE email like '%@%' => gné ? [:mlc]
- Sois bien sûr de ton coup : si tu fais ça en local, sur 20.000, le risque de plainte devient assez important (0,1%, ça ferait encore 20 mécontents potentiels) => ton FAI risque de ne pas apprécier...


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

Marsh Posté le 17-10-2005 à 12:21:16    

sircam a écrit :

Enfin bref:
 
- Fais ça impérativement en "local"; c'est fait
- Le code pour envoyer 10 emails est semblable à celui pour en envoyer 1 million; c'est a dire ?
- Prends du "checkpoints persistents" -> Si ça plante en cours de route, tu ne reprends que là où ça s'est arrêté. comment on fait ?
- Une mailing list : heu... Un peu lourd l'admin ML de free pour 20.000 personnes, hein. [:pingouino]
- Clause WHERE email like '%@%' => gné ? [:mlc] pour verifier la validite de l'addresse dest
- Sois bien sûr de ton coup : si tu fais ça en local, sur 20.000, le risque de plainte devient assez important (0,1%, ça ferait encore 20 mécontents potentiels) => ton FAI risque de ne pas apprécier...



---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 12:50:14    

imcdb a écrit :

sinon, quel serveur SMTP gratuit me conseillez-vous pour cette charge d'envoi ?


 
perso ,j'utilise postfix pour mes mailing ( sous linux )  
sous winodw s, j'utilise power emailer ( qui est payant )


---------------

Reply

Marsh Posté le 17-10-2005 à 12:50:36    

imcdb a écrit :

pour verifier la validite de l'addresse dest


Avec where email like '%@%'?[:ktulu]
 
[:rofl2]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 17-10-2005 à 12:58:52    

Citation :

c'est a dire ?


Que ça ne change rien, entre 10 et 100.000. [:pingouino]

Citation :

comment on fait ?


On réfléchit sommairement et on pisse le code qui va bien. [:pingouino]

Citation :

pour verifier la validite de l'addresse dest


Ca vaut un coup de pelle à clous ! [:mlc]
 
Skoi ce bricolage ? Garbage in, garbage out. On vérifie la validité de l'adresse AVANT de la stocker dans la DB, pas au moment de l'utiliser !


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

Marsh Posté le 17-10-2005 à 14:00:08    

disons que j'ai oublié de faire le test avant... donc, tenons pas compte de cette vérification, et que toutes les addr sont valides.
 
on va pas se compliquer la vie.
donc Cpas possible, c'est ca ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 14:23:47    

imcdb a écrit :

donc Cpas possible, c'est ca ?


Qu'est-ce qui n'est pas possible ??? Envoyer 20.000 emails ? Beh ouais, c'est possible.    [:pingouino]  


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

Marsh Posté le 17-10-2005 à 14:30:41    

mais en reprenant ca  

Code :
  1. require('addrs.php'); // tableau $addr_mail comprenant les addresses mail  
  2. foreach($addr_mail as $mail)
  3. {
  4.     mail($mail,"xxxxxx, Test Newsletter","test","From: xxxxx@gmail.com" );
  5. }


 
je vais me taper un beau timeout de chez free...


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 14:33:12    

Sklair.
 
On a bien dit EN LOCAL, et tu m'as bien dit "c'est fait". Alors, quel est le rapport avec un timeout chez Free ?


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

Marsh Posté le 17-10-2005 à 15:16:17    

je me suis mal exprimé. En fait, le SMTP de free emp^che d'envoyer plus de 400 mails en un seul bloc... après, il faut attendre une heure puor ré-envoyer d'autres mails...


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 17-10-2005 à 15:19:53    

Et c'est pour cette raison qu'on t'explique d'envoyer les mails de TON pc (en local donc) avec un serveur mail que tu installes sur ton pc ...


---------------
http://www.alsacreations.com, http://www.openweb.eu.org. Mon CV : http://cv.roane-irkana.net. A ne surtout pas prendre en exemple : http://www.worldinternet.be
Reply

Marsh Posté le 17-10-2005 à 15:23:40    

imcdb a écrit :

je me suis mal exprimé. En fait, le SMTP de free emp^che d'envoyer plus de 400 mails en un seul bloc... après, il faut attendre une heure puor ré-envoyer d'autres mails...


Ca, tu laisses tomber. Free permet d'envoyer des emails p.e. pour confirmer un enregistrement. Si c'est pour faire du mailing, ça devient rapidement limite. Vu la masse que tu demandes, c'est hors de question.
 
Tu passes en local, ou avec une offre d'hosting plus professionnelle - encore une fois, vu la masse, ça ma paraît être de rigueur.


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

Marsh Posté le 17-10-2005 à 21:31:57    

imcdb a écrit :

cool... merci pour le lien
question : peux-tu y importer un carnet d'adresses deja constitué ?


Mmm non [:petrus75]
 
Faudra que tu envoies 20000 mails à tes utilisateurs pour leur dire de s'inscrire à la mailing-list [:petrus75]
 
 
Il aurait fallu l'utiliser dès le départ... Donc je rejoins sircam, vu le volume de mails en envoyer il faut que tu prennes un service spécialisé...


---------------
Incongru : une FAQ abandonnée sur les Standards du Web - FAQ périmée de blabla@Prog
Reply

Marsh Posté le 17-10-2005 à 23:52:30    

Pour faire plus simple, tu fais mets juste tous tes mails en copie caché..
C rapide a l'envoi et plus simple...


---------------
création de site internet pour mairie | Le blog de Manu
Reply

Marsh Posté le 18-10-2005 à 09:15:02    

belette33 a écrit :

Pour faire plus simple, tu fais mets juste tous tes mails en copie caché..
C rapide a l'envoi et plus simple...


 :non: Mauvaise idée. Ca fait très impersonnel, ça fait "chipotage", comme on dit chez nous. Perso, je suis à deux doigts de filtrer les emails dans lesquelles aucune de mes adresses n'apparaît. Ca fout à néant les règles de filtrage d'email du destinataire, p.e. s'il utilise des adresses adhoc auprès de chaque site où il s'enregistre (c'est ce que je fais).
 
Un peu comme si on t'envoyait un courrier papier, mais dont tu n'est pas le destinataire annoncé sur l'enveloppe et sur la lettre : qu'est-ce que tu ferais face à un tel courrier ?   [:pingouino]


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

Marsh Posté le 18-10-2005 à 14:20:28    

Jettes un oeil la dessus.
http://pear.php.net/package/Net_SMTP
 
Tu peux utiliser une classe qui fait office de mini daemon SMTP pour envoyer tes mails (plus d'utilisation de mail()) et tu peux le faire de chez toi plutôt que de chez free.

Reply

Marsh Posté le 18-10-2005 à 14:49:27    

sircam a écrit :

:non: Mauvaise idée. Ca fait très impersonnel, ça fait "chipotage", comme on dit chez nous. Perso, je suis à deux doigts de filtrer les emails dans lesquelles aucune de mes adresses n'apparaît. Ca fout à néant les règles de filtrage d'email du destinataire, p.e. s'il utilise des adresses adhoc auprès de chaque site où il s'enregistre (c'est ce que je fais).


Hein :??: En copie cachée, tu reçois bien le mail, à ton adresse, sans voir les adresses des autres, ce qui est obligatoire pour une mailing list :??:

Reply

Marsh Posté le 18-10-2005 à 15:10:55    

FlorentG a écrit :

Hein :??: En copie cachée, tu reçois bien le mail, à ton adresse, sans voir les adresses des autres, ce qui est obligatoire pour une mailing list :??:


Beh tu n'es pas dans le champs "To". Tu reçois l'email, mais il est adressé à "undisclosed recipients" ou à un tiers. Une hérésie, mais c'est comme ça.   [:pingouino]
 
Et si tu as un nombre infini d'adresses qui pointent sur ta mailbox, parce que tu utilises des adresses adhoc à chaque fois que tu t'enregistres sur un site, tu l'as un peu dans l'os.   [:pingouino]


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

Marsh Posté le 18-10-2005 à 15:30:36    

outdial a écrit :

Jettes un oeil la dessus.
http://pear.php.net/package/Net_SMTP
 
Tu peux utiliser une classe qui fait office de mini daemon SMTP pour envoyer tes mails (plus d'utilisation de mail()) et tu peux le faire de chez toi plutôt que de chez free.


on a un equivalent sous apache windows ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 18-10-2005 à 15:37:10    

imcdb a écrit :

on a un equivalent sous apache windows ?


[:pingouino]

Reply

Marsh Posté le 18-10-2005 à 15:58:20    

installation OK, mais je sais pas comment appeler les fonctions inclues dans le package PEAR pour utiliser le module net_SMTP
 
comment l'appelle-t-on dans le script d'envoi de mail ?


Message édité par imcdb le 18-10-2005 à 16:06:46

---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 18-10-2005 à 16:31:59    

Voila un script proposé sur le site officiel de PEAR
 

Code :
  1. <?php
  2. include('Mail.php');
  3. $destinataires = array('To' => 'jules@exemple.com',
  4.                     'Bcc' => 'jeanne@exemple.com');
  5. $entete['From']    = 'eric@exemple.com';
  6. $entete['To']      = 'jean@exemple.com';
  7. $entete['Subject'] = 'Message de test';
  8. $contenu = 'Message de test';
  9. $parametres['sendmail_path'] = '/usr/lib/sendmail';
  10. // Creer l'objet mail avec la methode Mail::factory  
  11. $mail_object =& Mail::factory('sendmail', $parametres);
  12. $mail_object->send($destinataires, $entete, $contenu);
  13. ?>


 
Mais bon, c'est evident que le premier require va planter, vu que le Mail.php n'est pas à la racine de mon WWW mais dans le rep c:\php\pear\ de mon DD...  
 
Question, ou positionner ce script, et comment y faire appel (en modifiant le httpd d'Apache) ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 18-10-2005 à 16:34:48    

[:mlc]
Ajouter le rep de PEAR dans le include_dir?[:pingouino]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-10-2005 à 17:20:03    

dans le php.ini ou httpd.conf ?


---------------
Réagissez et commentez mes dessins sur snut.fr
Reply

Marsh Posté le 18-10-2005 à 18:43:22    

php.ini, triple buse, c'est une option de php, apache a rien à voir là-dedans!:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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