syrx20 Posté 17 Juin 2007 Posté 17 Juin 2007 Bonjour, J'envoi des mails tous les jours aux visiteurs de mon site. Pour cela je fais une boucle dans le resultat d'un "select mail from newletter" et j'envoi le mail avec la fonction php "mail". Le contenu est stocké dans une variable avant de rentrer dans la boucle. Mon problème c'est que je n'arrive pas à envoyer plus de 1500 mails par heure. Y a t il un moyen d'optimiser tout cela? Merci
Wefficient Posté 17 Juin 2007 Posté 17 Juin 2007 Ce n'est pas très clair ton truc. Quand tu dis aux visiteurs, tu veux dire aux personnes qui se sont abonnées sur ton site ? Du genre je m'abonne en te laissant mon email, et si je passe sur ton site, cela déclanche l'envoi d'un email ce jour là et les jours ou je ne passe pas, je ne reçois rien. Ou c'est plutôt à la manière d'une newsletter, tu envoies tous les jours un mail point barre. Et que le truc que tu as bricolé pour faire ton envoi ne te permet d'en envoyer que 1500 de l'heure. T'as combien d'abonné ? combien de mails t'envoie et qu'est ce que c'est comme type de mail ?
syrx20 Posté 17 Juin 2007 Auteur Posté 17 Juin 2007 Oui c'est au personne qui s'inscrivent sur mon site. Et aprés inscription ils reçoivent tous les jours le programme télé dans leurs emails. Voici le code du truc que j'ai "bricolé" set_time_limit(0); //connexion bdd $contenu="..."; $requete = mysql_query("SELECT mail FROM newsletter WHERE dernier_envoi<>'$datedujour';"); $cpt=0; while($line=@mysql_fetch_array($requete)) { $contenu.=$desincription; $mail=mysql_result($requete,$cpt,0); _AT_mail($mail,$sujet,$contenu,$entete); mysql_query("UPDATE newsletter SET dernier_envoi='$datedujour' WHERE mail='$mail'"); $cpt++; } //deconnexion bdd Pour le nombre de mail je suis bloqué à 36000 par jour du coup (1500 * 24)
Wefficient Posté 17 Juin 2007 Posté 17 Juin 2007 Tes programmes sont personnalisés pour avoir besoin d'être créés un par un par ce système ? Pourquoi ne pas faire un mailing traditionnel pour cet envoi, cela serait sans doute plus simple. Quelle est la taille max de ta base (nb inscrits) et comment tu finance le système ? Déjà pour te dépanner, tu peux simplement envoyer le programmes de plusieurs jours et ainsi multiplier ton nombre de destinataires d'autant. Ton serveur, c'est un dédié ? Perso je ne suis pas pro en dynamique et php; Donc là dessus je ne pourrais pas t'aider. Par contre dans l'aspect emailing, t'as certainement bcp de choses optimisables.
petit-ourson Posté 17 Juin 2007 Posté 17 Juin 2007 Pas très économique la fonction mail dans une boucle. Note: Il est important de noter que la fonction mail() n'est pas conseillée pour traiter de gros volumes de mails dans une boucle. Cette fonction ouvre et ferme un socket SMTP pour chaque mail, ce qui n'est pas très efficace. Pour envoyer de gros volumes de mails, reportez-vous aux paquets » PEAR::Mail et » PEAR::Mail_Queue. PEAR::Mail : http://pear.php.net/package/Mail PEAR::Mail_Queue : http://pear.php.net/package/Mail_Queue Après, je ne sais pas (en fait pas envie de m'expliquer), c'est la documentation qui nous prévient : http://fr3.php.net/manual/fr/function.mail.php Un moment j'utilisais PHPMailer (http://sourceforge.net/projects/phpmailer/) qui permet d'utiliser des connexions sur un serveur SMTP une seule fois (contrairement à la fonction mail qui se connecte à chaque fois me semble-t-il).
Wefficient Posté 17 Juin 2007 Posté 17 Juin 2007 voila en effet déjà une bonne piste technique pour ton optimisation.
syrx20 Posté 18 Juin 2007 Auteur Posté 18 Juin 2007 Je viens de modifier la fonction mail par pear::mail mais la vitesse est toujours la même N'y a t il pas quelque chose à paramétrer dans Sendmail? Il a l'air de bloquer longtemps sur certains envois...
binarygirl Posté 29 Juin 2007 Posté 29 Juin 2007 Bonjour, Effectivement envoyer des mails en boucle via PHP n'est pas la solution idéale. De plus certains hébergeurs ont toutes sortes de restrictions en place, par un exemple un timeout de 30 ou 60 secondes voire moins, ce qui empêche les scripts de tourner pendant une longue durée. Sur un de mes gros sites: j'ai adopté la stratégie suivante: je délègue le tout à un logiciel de mail list (liste de diffusion) déjà installé sur le serveur: il s'agit de Mailman (il en existe d'autres similaires). Concrètement les membres peuvent choisir de s'inscrire ou se désinscrire à un newsletter en cochant une case (c'est un formulaire en PHP qui permet de renseigner leur profil et sauve le tout dans une DB mySQL, du classique donc). Ensuite via la fonction exec() j'invoque la commande add_members ou remove_members selon le cas pour ajouter ou retirer les membres de la mail list. Voir un aperçu des instructions (anglais): http://www.gnu.org/software/mailman/site.html Il est aussi possible de faire la synchronisation par batch en donnant un fichier texte à importer (sync_members), cela peut être très pratique. L'avantage d'utiliser un logiciel de mail list c'est que c'est vraiment conçu pour les envois de masse et qu'il gère les envois tranquillement en arrière-plan. Quand je veux envoyer ma newsletter je n'ai qu'à l'envoyer à newsletter_AT_monsite.com [nom de la liste de diffusion], Mailman reçoit le mail et s'occupe de l'acheminer à chaque membre. L'inconvénient de cette solution c'est qu'il faut bien configurer la mail list pour éviter le spamming. Personne d'autre que vous ne devrait pouvoir envoyer du mail aux membres inscrits. Il faut donc: - mettre des filtres au niveau de l'expéditeur (par exemple seul admin_AT_monsite.com a le droit d'envoyer des messages à la liste) - évidemment ça ne suffit pas car il est facile d'envoyer un mail en se faisant passer pour qqu'un d'autre, il faut aussi mettre les messages en approbation manuelle; il ne faut pas perdre de vue que c'est un mail list classique. Il faut éviter que n'importe qui puisse envoyer du spam; si qqu'un peut envoyer librement du spam à newsletter_AT_monsite.com ça touche tous les abonnés donc beaucoup de monde ! Un autre aspect à ne pas négliger est que certains logiciels de mail lists acceptent des instructions via E-mail: par exemple on peut s'inscrire ou se désinscrire en envoyant un mail qui dit "subscribe" ou "subscribe". Il y a d'autres commandes du style "list members", si j'envoie ça à newsletter_AT_monsite.com Mailman me renvoie une liste de toutes les adresses E-mail faisant partie de la liste de diffusion. Evidemment il faut désactiver ce genre de fonctionnalités ou les restreindre à l'admin si c'est possible ! Bref il faut bien prendre le temps de se familiariser avec les fonctionnalités et faire des tests. J'ai un serveur dédié donc pas de restrictions particulières. Il est possible que certains hébergeurs n'autorisent pas la commande exec() en PHP, et tous n'offrent pas un logiciel de mail list sur leurs serveurs. Je pense que pour les envois de masse c'est la seule solution qui tient la route.
Wefficient Posté 1 Juillet 2007 Posté 1 Juillet 2007 Je pense que pour les envois de masse c'est la seule solution qui tient la route. Pas du tout du même avis. Pour de l'envoi de campagnes de mails (car ce rien d'autes que cela) ton système reste du bricolage. Bien ficelé certes mais bricolage quand meme. Cela reste risqué pour plusieures raisons : - si tu bloque pas tous les entrées et que qqn arrive à se faire passer pour toi, c'est toute ta liste qui se retrouve spammée - Les mailing list sont de plus en plus bloquées parce que considerées comme des relais - t'as pas de tracking or quel pourcentage de ta base est propre et actif ? - ne pas avoir de retours en direct est le meilleur moyen de se retrouver avec un effet domino lors des envois, et ensutie de se retrouver blacklisté. Donc tu as peut être trouvé un bon bricolage qui te convient dans ton cas et a ton niveau de gestion, mais qqn qui ne sera pas aussi bon bricoleur se retrouvera certainement dans le mur. :-( Y'a quand meme quelques aspects positifs dans ton système : - serveur dédié qui limite les risques de dérapage. si qqch foire, ce ne peut être que de ta faute. - bridage des fonctionnalités de relay de base - accréditation manuelle des messages mais ce n'est clairement pas le meilleur système pour faire de l'emailing de masse. Le meilleur système serait de passer par une API d'un prestataire serveur blanc, afin de faire passer tous ces mails automatiquement depuis ton site et automatiquement en mail de service. Par contre c'est encore actuellement pas donné, nécéssite un développement spécifique, et cela exige une base opt-in stricte et déjà nettoyée des NPAI. Il faut également que ces emails soient integrés dans un business model car ils sont facturés. Donc soit tu les finance par la pub soit tu rends ton service payant. My 2 cents...
spools Posté 23 Décembre 2009 Posté 23 Décembre 2009 (modifié) Donc, quel système d'envoie utiliser pour que ça soit très rapide ? Si quelqu'un a une expérience avec Mail_Queue ça serait sympa. Perso avec une boucle php et la fonction mail() j'envoie environ 3000 mails par heure sur un dédié. Ce qui m'étonne c'est l'utilisation du processeur sur le serveur. La boucle php ne prend que 1% et le serveur mail ne prend que 2%. Pourquoi il prend pas tout son potentiel pour l'envoie ? ps : oui je sais le message date .. Modifié 23 Décembre 2009 par spools
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant