Envoyer une newsletter a partir d'un serveur mutualisé


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Envoyer une newsletter a partir d'un serveur mutualisé

Message le Ven Fév 08, 2008 13:47

Bonjour,

Je dois envoyer 3000 newsletters a partir d'un serveur mutualisé

******** caracteristiques **********
Le poid html du mail est de 35ko
pas droit aux copies cachées
droit aux taches crons
+ 20 enregistrements supplémentaires par jour
******************************

Je pensais faire comment ca:
- 10 scripts qui vont prendre en compte 10% chacun des enregistrements a traiter
- 8 apel par script ( tache crons toute les heures 00.00h -> 07.00h)

Ce qui fait 8*10 = 80 taches

Donc avec 3000 mails :
3000 / 80 = 38 traitements par script

1° je suis parano et je peux envoyer 3000 mails d'un coup avec set_time_limit(0) ?
2° Mon idée est pas si mal et à votre avis, je peux monter jusqu'à combien de traitement par script pour le futur: 100, 200, 500 ?
3° cela ne va t-il pas poser des problèmes de répartir 3000 mails de cette manière pour le serveur mail ? genre spam ? Ou inversement c'est très bien comme méthode ?


ludoanimation
WRInaute impliqué
WRInaute impliqué
 
Messages: 770
Inscription: 25 Juil 2003

Message le Ven Fév 08, 2008 16:28

Moi sur un site je le fais avec wanewsletter pour 3500 dest sur un 60gp avec mail a chaque destinataire (pas de copies cachées )

faut regler a environ 300 dest par envoi ce qui fait qu'il faut cliquer une bonne dizaine de fois sur envoyer le flot suivant ... mais ca passe impecable


e-kiwi
Modérateur
Modérateur
 
Messages: 15617
Inscription: 23 Déc 2003

Message le Ven Fév 08, 2008 16:34

ajaaaax.
chaque minute, le script lance l'envoi à 100 destinataires (1 à 1). tu laisse la fenetre ouverte et l'appli ajax tourner :)

yann214
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 385
Inscription: 17 Nov 2005

Message le Ven Fév 08, 2008 17:26

sinon faut faire un petit script qu'on met en crontab.

bixi
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: 19 Sep 2007

Message le Ven Fév 08, 2008 17:28

yann214 a écrit:sinon faut faire un petit script qu'on met en crontab.

en mutualisé tu oublie CRON


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Ven Fév 08, 2008 17:43

ludoanimation a écrit:Moi sur un site je le fais avec wanewsletter pour 3500 dest sur un 60gp avec mail a chaque destinataire (pas de copies cachées )

faut regler a environ 300 dest par envoi ce qui fait qu'il faut cliquer une bonne dizaine de fois sur envoyer le flot suivant ... mais ca passe impecable


je suis sur un 90 plan mais je ne pense pas que cela change grand chose. Donc si j'installe mon systeme, je pourrais le monter jusqu'a 300 traitements
ce qui fait -> 300*80 = 24 000 traitements

ca me va, cela me laissse quelques années tranquille devant moi :D

e-kiwi a écrit:ajaaaax.
chaque minute, le script lance l'envoi à 100 destinataires (1 à 1). tu laisse la fenetre ouverte et l'appli ajax tourner


je préfère passer 10 heures de plus aujourd'hui à developper 1 script que 300 heures dans les mois à venir à regarder une fenetre Internet se reloader, sans compter qu'entre le serveur et ma fenêtre, les bytes ont 7000 bornes à se taper :mrgreen:

bixi
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: 19 Sep 2007

Message le Ven Fév 08, 2008 17:49

tu peux par contre créer ton propre script AJAX qui s'occupera de cliquer pour toi sur le bouton SUIVANT :p

En gros tu crée un objet ajax qui lance ton script PHP qui est censé envoyé 100 mail.. sur le Oncomplete, tu relance le meme script en boucle avec a chaque fois des parametre différents (identifiant du client correspondant au premier mail a envoyé et nombre de client suivant)

oublie pas de lancer un EVENT onFinish dans le cas ou tu es arrivé au dernier client sinon le script va se taper une boucle infini :p


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Sam Fév 09, 2008 11:36

ca me soule ajax puis j'ai pas mis 10 heures mais 3 heures en partant de zero et je l'ai rendu portable au maximum pour ceux que cela interresse
ce systeme permet d'envoyer environ jusqu'a 30 000 newsletters individualisés, tout dans le meme placard chez l'hebergeur, et un envoi étalée sur 10 heures.
Je suis parti sur une base de 10.
10 scripts * 10 heures.
Cela fait 100 traitememts

De quoi partir en vacances tranquille pendant que php travaille pour nous ;)

Code: Tout sélectionner
/*
1° creer les 2 tables

CREATE TABLE `newsletter_liste` (
  `id` int(255) NOT NULL auto_increment,
  `email` varchar(150) NOT NULL default '',
  `nom` varchar(255) NOT NULL default '',
  `membre` int(3) NOT NULL default '0',
  `date` date NOT NULL default '0000-00-00',
  `numero` varchar(100) NOT NULL default '0',
  PRIMARY KEY  (`email`),
  KEY `id` (`id`)
) ENGINE=MyISAM;



CREATE TABLE `newsletter_positions_id` (
  `pos` int(11) NOT NULL default '1',
  `ch1` tinyint(3) unsigned NOT NULL default '1',
  `ch2` tinyint(3) unsigned NOT NULL default '1',
  `ch3` tinyint(3) unsigned NOT NULL default '1',
  `ch4` tinyint(3) unsigned NOT NULL default '1',
  `ch5` tinyint(3) unsigned NOT NULL default '1',
  `ch6` tinyint(3) unsigned NOT NULL default '1',
  `ch7` tinyint(3) unsigned NOT NULL default '1',
  `ch8` tinyint(3) unsigned NOT NULL default '1',
  `ch9` tinyint(3) unsigned NOT NULL default '1',
  `ch10` tinyint(3) unsigned NOT NULL default '1'
) ENGINE=MyISAM;


2° mettre a jour la table newsletter_liste la vieille avec un CRON
   c'est ici que vous allez chercher les emails d'une autre table pour les mettre dans cette table
   des problemes pour le faire ? je vous passes mon alog ;)
   j'ai mis 1 drop + create pour etre sur que les ID recommence bien a partir de 0

mysql_query("DROP TABLE newsletter_liste");
mysql_query("CREATE TABLE newsletter_liste (
  id int(255) NOT NULL auto_increment,
  email varchar(150) NOT NULL default ''
  PRIMARY KEY  (email),
  KEY id (id)
) ENGINE=MyISAM;");



3° mettre a jour la table newsletter_positions_id la vieille avec un CRON
   rien de particulier sauf que la table newsletter_positions_id doit abolument etre a jour
   avant de lancer les scripts

<?php
// mise jour de la table newsletter_positions_id
mysql_query("DELETE FROM newsletter_positions_id");
mysql_query("INSERT INTO newsletter_positions_id (pos, ch1, ch2, ch3, ch4, ch5, ch6, ch7, ch8, ch9, ch10) VALUES (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)");
?>


placer 10 scripts avec le code.

LA SEULE CHOSE A MODIFIER va etre la variable $position

le script n°1 aura $position = 1;
le script n°2 aura $position = 2;
le script n°3 aura $position = 3;
..
le script n°10 aura $position = 10;


5° aller sur votre planificateur de taches, ajouter chaque script 1 par 1 avec 10 apel par script
0h -> 10h

enjoy ;)


*/

/*******************************************************************************
    * connection sql
    ***************************************************************************/
$connection = mysql_connect("localhost","root","motdepasse");
if ( ! $connection )
die ("connection impossible"); 
$mabasededonnee="Client";
mysql_select_db($mabasededonnee) or die ("pas de connection"); 

$table_sql = "";  // nom de votre table

/*******************************************************************************
    * position, A MODIFIER selon le n° du script
    ***************************************************************************/

$position = 1;  // 1 -> 10

/*******************************************************************************
    * code  NE RIEN MODIFIER A PARTIR DE LA SAUF LA COMMANDE MAIL() bien sur ;)
    ***************************************************************************/

$base = 10;

// nom du champ
$champ_sql_position = "ch$position";
// recherche la derniere position
$q = mysql_query("SELECT ".$champ_sql_position." FROM newsletter_positions_id WHERE pos=1"); // requete
$r = mysql_fetch_array($q);
// la derniere position connu 1 -> 10
$facteur_dernier_id = $r[$champ_sql_position];

// le nombre d'enregistrement
$q1 = mysql_query("SELECT id FROM newsletter_liste"); // requete
$nombre_enregistrements = mysql_num_rows($q1);
// on arrondi a la centaine
$nombre_enregistrements = round($nombre_enregistrements, -2);
// cherche le nombre d'enregistrement a traiter
// donc 10 scripts, cela fait nbre enregistrements / 10

$new_nombre_enregistrements = $nombre_enregistrements / $base;

// combien de traitement a faire a chaque fois ?
// puisque le script est apelé 10, ca sera / 10

$nombre_de_traitements = $new_nombre_enregistrements / $base;

// on va chercher ou pointe le premier id
// on va d'abord regarder ou il commence

$premier_id = $new_nombre_enregistrements * $position;
$supplement = $nombre_de_traitements * $facteur_dernier_id;
$dernier_id =  $premier_id + $supplement;
$dernier_id = $dernier_id - $new_nombre_enregistrements;
$dernier_id = $dernier_id - $nombre_de_traitements;
// Le premier id sera donc $dernier_id

$id = round($dernier_id);
$i = 0;
while ($i < $nombre_de_traitements )
{
   $q2 = mysql_query("SELECT email FROM newsletter_liste WHERE id=$id"); // requete
   $r2 = mysql_fetch_array($q2);
   $e_mail = $r2['email'];


      // envoie de mail personnalisé
      //  mail();

      echo $e_mail;
      echo ' - ';
      echo $id;
      echo '<br />';

   $id++;
   $i++;
}
// mise a jour de la position
mysql_query("UPDATE newsletter_positions_id SET ".$champ_sql_position."=".$champ_sql_position."+1 WHERE pos=1");
//exit();
?>




Au moment de vos tests, vous devriez en lancant le script avec 10% de 10% des enregistrements de votre base voir apparaitre les enregistrements concernés. en recliquant, vous devriez voir les enregistrements suivant concernés et ainsi de suite.

bixi
WRInaute discret
WRInaute discret
 
Messages: 70
Inscription: 19 Sep 2007

Message le Sam Fév 09, 2008 15:28

hum.. tu parle de CRON dans ton script.

tu es donc sur un serveur dédié ?

Si oui tu as la main sur la limite d'execution de script ?

du coup ton script sert a rien ?

titi63
WRInaute discret
WRInaute discret
 
Messages: 61
Inscription: 30 Jan 2005

Message le Sam Fév 09, 2008 15:43

ludoanimation a écrit:faut regler a environ 300 dest par envoi


Ya pas de risques de fermeture du compte pour 300 dest par envoi???


KOogar
WRInaute accro
WRInaute accro
 
Messages: 3974
Inscription: 16 Nov 2004

Message le Sam Fév 09, 2008 20:42

bixi a écrit:hum.. tu parle de CRON dans ton script.

tu es donc sur un serveur dédié ?

Si oui tu as la main sur la limite d'execution de script ?

du coup ton script sert a rien ?


ce systeme est pour du mutualisé

titi63 a écrit:Ya pas de risques de fermeture du compte pour 300 dest par envoi???


non, ca passe ou ca passe pas, c'est tout.

Tu peux te faire fermer un compte mail si il y a plus de 3 personnes qui porte plainte pour spam sur le même envoi de mail.


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :

  • Analyser la classe C de l'adresse IP
    Cet outil vous permet de vérifier si plusieurs sites sont hébergés sur la même classe C (adresse IP du serveur).
  • Stratégies de mots-clés
    Cet outil vous permet de créer à partir de quelques mots-clés une liste d'expressions constituées des mots pris dans tous les ordres possibles. Il sert aux analyses de positionnement et achats de mots-clés.
  • Test HTTP header
    Cet outil vous permet de connaître le code HTTP renvoyé par le serveur pour une page donnée.


Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité