IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

[Mail] Envoyer un e-mail avec des interruptions


Sujet :

Langage PHP

  1. #1
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut [Mail] Envoyer un e-mail avec des interruptions
    Bonjour à tous,
    J'ai une question relativement simple sur l'envoi des emails,
    Un envoi multiple est très simple à mettre en place avec la class PHPmailer avec la récupération des adresse via un fetchAll de PDO.
    Cependant je souhaite faire la même chose mais avec une interruption entre chaque email.
    Car envoyer 500 mails en une fois est considéré comme du spam et en plus indique toutes les adresse dans le mail ce qui ne m'enchante pas du tout.
    Peut on alors effectuer un envoi multiple avec une interruption ?
    Je suppose qu'au lieu d'utiliser un fetchAll() il suffit de faire un fetch() tout court et une boucle while avec les adresse mails + une fonction d'interruption je pensais à sleep() mais bon quel est la meilleur façon de procéder?
    Je n'aurai jamais plus de 800 mails de toute façon
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  2. #2
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Points : 3
    Points
    3
    Par défaut
    Tu as raison, il suffit de mettre une boucle avec un for, un while ou quoi que ce soit

    Une fois que tu arrives à $nbLimiteMail tu fais un sleep(x seconds); et tu remet ton compteur de limiteMail à 0....
    Et ceux jusqu'à ce que ton nombre de mail à envoyer soit égal à celui envoyer par le serveur (deuxième compteur)

  3. #3
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    En général j'implémente directement le tableau passer préalablement dans un foreach pour plus de faciliter avec un fetchAll de PDO.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    function loadUsersFrontend(){
     
    		global ************
    			$dbh = new PDO(********************);
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			$stmt = $dbh->prepare("SELECT id, email from db_mailer where id ORDER BY id");
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    			$stmt->closeCursor();
    			$stmt = null; 
    		return $result;
    	}
    function loadMail(){
    		$emails = Array();
    		foreach ($this->loadUsersFrontend() as $user) $emails[] = $user['email'];
    		return implode(';', $emails);
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mail->AddAddress($this->loadMail());
    MAis ici je doit m'y prendre autrement, cependant utilisez fetch m'oblige a demander à php de commencer toujours depuis le premier enregistrement sinon il me retournera systématiquement le dernier sachant que les enregistrement ne sont jamais les même vu qu'ils doivent être selectionner via une requête de tri préalable pour par exemple envoyer un mail à une catégorie de personne bien spécifique.
    Bref quelques conseils semble les bienvenus pour voir si je suis dans le bon ;-)
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  4. #4
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Pourriez-vous me donner un exemple pour créer une mailling list avec un arrêt entre chaque envoi vers une adresse ???
    Car je ne vois pas trop l'idée du compteur
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 31
    Points : 36
    Points
    36
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
     
    // Tableau contenant les adresses mail
    $mails = array();
     
    // Nombre de mails qu'on veut envoyer chaque seconde
    $nbMailsParCycle= 150;
     
    // Temps à attendre entre chaque fournée
    $delai = 60;
     
    $nbEnvoye = 0;
     
    foreach ($mails as $mail)
    {
        if ($nbEnvoye == $nbMailsParCycle)
        {
            $nbEnvoye = 0;
            sleep($delai);
        }
     
    // Envoi du mail
    // ...
     
    $nbEnvoye++;
     
    }

  6. #6
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Je me suis peut être embrouiller mais cela ne fonctionne pas.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    function loadMailPartenaires(){
    		$emails = array();
    		// Nombre de mails qu'on veut envoyer chaque seconde
    		$nbMailsParCycle= 1;
    		// Temps à attendre entre chaque fournée
    		$delai = 1;
    		$nbEnvoye = 0;
    		$dbparts = new dbPartenaires();
    		foreach ($dbparts->selectPartByMail() as $pemails => $sendmails){
    		    if ($nbEnvoye == $nbMailsParCycle){
    		        $nbEnvoye = 0;
    		        sleep($delai);
    		    }
    		    $emails[] = $sendmails['partenairesemail'];
    		$nbEnvoye++;
    		}
    	return $emails;
    		//implode(';', $pemails);
    	}
    Dois je récupérer tous les emails puis ensuite faire un envoi un à un ou récupérer les emails un à un??

    Je récupère les emails de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function selectPartByMail(){
    		global ****************************
    			$dbh = new PDO($****, $*****, $********);
    			$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    			$stmt = $dbh->prepare('SELECT partenaires.link_id, partenaires.email AS partenairesemail, clients.link_id, clients.email AS clientsemail FROM partenaires JOIN clients ON (partenaires.link_id = clients.link_id) WHERE partenaires.link_id = :link_id');
    			$stmt->bindParam(':link_id',$this->getlink_id);
    			$stmt->setFetchMode(PDO::FETCH_ASSOC);
    			$stmt->execute();
    			$result = $stmt->fetchAll();
    		return $result;
    	}
    Sa coince un peux pour la manière d'envoyer un mail toutes les x microsecondes avec un arrêt obligatoire entre chacun.
    Je pense que mon code envoi tout apres x temps sans certitude et puis c'est peut être pas bien optimisé
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

  7. #7
    Membre confirmé Avatar de gtraxx
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2006
    Messages : 1 043
    Points : 570
    Points
    570
    Par défaut
    Bon il me reste une derniére chose, j'ai plus ou moins trouvé quelque chose qui fonctionne.
    Cependant, j'aimerai afficher le traitement des envois avec l'affichage via par exemple un print chaque fois qu'un mail est envoyé.
    Donc un genre de comptage afin de comparer si tout est parti.
    Le nombre d'envoi est varié et compter sera vraiment un bon plan.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    function loadMailPartenaires(){
    		$emails = array();
    		$nbMailsParCycle= 1;
    		$delai = 100000;
    		$nbEnvoye = 0;
    		$dbparts = new dbPartenaires();
    		print '<ul>';
    		foreach ($dbparts->selectPartByMail() as $pemails => $sendmails){
    		    if ($nbEnvoye == $nbMailsParCycle){
    		    	$temps_debut = microtime(true);
    		        $nbEnvoye = 0;
    		        print '<li style="list-style:decimal;">arrete en cours<br />'."\n";
    		        usleep($delai);
    		        print $emails[] = $sendmails['partenairesemail'];
    		        print $emails[].='</li>';
    		        $temps_fin = microtime(true);
    		        print $temps_fin;
    		    }
     
    		$nbEnvoye++;
    		}
    		print '</ul>';
    		print round($temps_fin - $temps_debut, 4);
    	return implode(',',$emails);
     
    	}
    Avec ce code il me retourne tous le traitement en une fois mais l'afficher petit à petit serai bien bien.
    Une idée ??
    Au petit déjeuner, je prend du PHP et au souper du jQuery.
    AFUP 2009 : Bien optimiser son code pour le référencement
    Mon projet open source de librairie PHP 5: magix cjquery

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/08/2009, 09h55
  2. Réponses: 5
    Dernier message: 06/12/2008, 09h32
  3. [Mail] Envoyer un e-mail avec images incorporées
    Par guigo dans le forum Langage
    Réponses: 6
    Dernier message: 24/01/2008, 16h42
  4. [Mail] Envoyer un e-mail à l'aide de PHP
    Par Yepes dans le forum Langage
    Réponses: 8
    Dernier message: 18/09/2007, 21h55
  5. [Mail] Comment garder les mails envoyés?
    Par JSuper_Kitten dans le forum Langage
    Réponses: 5
    Dernier message: 16/10/2005, 14h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo