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 des e-mail à une liste de diffusion


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut [Mail] Envoyer des e-mail à une liste de diffusion
    Bonjour tout le monde.
    J'ai une liste de diffusion dans une DB Mysql. J'essaie d'envoyer le message ici
    $msg
    Ce code que j'ai fait met un temps fou pour envoyer seulement à 200 adresses. En plus il n'arrive pas à aller jusqu'au bout. Qui peu m'aider avec un code simple mais clair. D'avance un grand merci

    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
    <?php
    do{
     
    $lemail = $row_result['email'];
    $lenom = $row_result['nom'];
     
    $msg = $salutation." ".$lenom.", \n\n";
    $msg .= $lemessage."\n\n";
    $msg .= $note."\n\n";
     
    mail($lemail, $objet, $msg, $entete);
    } 
    while($row_result = mysql_fetch_assoc($rsReference));
     
    ?>

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    Citation Envoyé par Alexandrebox
    En plus il n'arrive pas à aller jusqu'au bout.
    Est-ce que tu as un message d'erreur affiché?

    Si c'est un problème de timeout, tu dois sélectionner tes mails par lots de p.ex. 50 puis tu fais un rafraichissement de ta page et tu passes aux 50 suivants.

  3. #3
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci, mais 200 mails, tu penses que c'est trop?

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    ben je suis pas sûr que ce soit trop pour le timeout mais de toute façon il vaut mieux envoyer par petits lots, comme ça s'il y a un problème tu peux recommencer aux derniers qui n'ont pas été envoyés (tu rajoutes un champ "dernier envoi" à ta table et tu l'updates pour chaque adresse avant le rafraichissement).

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    21
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 21
    Points : 25
    Points
    25
    Par défaut
    Bonjour,
    Ta fonction envoi 200 mails, alors oui c'est normal que ce soit si long, une solution pourrait être d'envoyer un seul mail avec 200 copies cachées:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    $copie_cachee="";
     
    while($row_result = mysql_fetch_assoc($rsReference)){
     
    $lemail = $row_result['email'];
     
    $copie_cachee.=",".$lemail;
    }
     
    $entete .= 'Bcc: '.$copie_cachee."\n";
    Malheureusement, ils ne seront pas personnalisés

    Cordialement.

  6. #6
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Merci, mais je me demande si ce n'est pas plutot mon code.
    Je dis ça parce que j'ai fait un test avec seulement 3 adresses. ça a marché mais je trouve le temps un peu long pour envoyer à trois adresses.
    Qu'elqu'un pourra me proposer un code plus adapté?

    D'avance merci

  7. #7
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 023
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 023
    Points : 2 273
    Points
    2 273
    Par défaut
    Salut,
    mail() ouvre et ferme une socket à chaque fois, essaie plutôt d'utiliser le package Pear::Mail soit avec le sendmail ou le SMTP.

    Le coup des BCC c'est bien mais je crois que pas mal de filtres de courriers indésirables bloquent les mails avec un BCC de 200 destinataires.
    Bye

  8. #8
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Tu es trop bon pour moi.
    Je comprends que dalle de ce que tu dis. En terme clair les néophytes, ça donnera quoi?

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    A-s tu essayé la classe Pear::Mail que te conseillais Djakisback?

    Sinon ya aussi la classe phpMailer..

  10. #10
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Je suis débutant je ne sais pas trop ce que c'est.
    Je connais que la fonction mail.
    Mais comment les autres font-ils leur newsletter? Je ne cherche pas quelque chose de très sophistiqué; juste envoyer à 200 personnes



    Merci d'avance

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Perso, j'utilise phpMailer c pas beaucoup plus compliqué que la fonction mail et c plus clair..

    Une ptite recherche sur google et tu tombes sur la doc: Ici

    Le 2° lien t'envoie sur le tuto de dvlppez.com, c'est encore plus clair que la doc mais le site est down pour le moment .

    En gros, tu télécharges la classe, tu la places sur ton serveur puis dans ton php:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	include $chemin."class.phpmailer.php"; 
     
    	$mail = new PHPmailer();

    A partir de là tu as accès à ttes les fctions et propriétés de la classe.

  12. #12
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    C'est très pro. Merci.
    Je suis hébergé. Tu penses que ça va jouer?
    De toute façon je vais essayer. Merci pour ta patience.

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Citation Envoyé par Alexandrebox
    Je suis hébergé. Tu penses que ça va jouer?
    Jpense pas; je n'ai vu aucune différence quand je suis passé de la fonction mail à la classe phpMailer sur mon hébergement.

  14. #14
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Jpense pas;
    ça veut dire que ça ne marchera pas?
    Au fait, j'ai finalement utilisé pour contourner le problème, ça ne le résout pas mais en attendant, j'espère que ça marchera. J'ai fait ça parce que je n'ai pas bien compris l'utilisation de PHPmailer. En plus semble t-il qu'il ne va pas plus vite que Mail. Bref je nage comme tu peux le remarquer

    Merci, ça fait plaisir de voir que quelqu'un me prend au sérieux.

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    ça veut dire que ça ne marchera pas?
    Je voulais dire qu'il ne devrait pas y avoir de problème.

    En plus semble t-il qu'il ne va pas plus vite que Mail
    Effectivement, tu peux même dire que c'est plus lent (j'avais oublié, ya pas plus rapide que la fct° mail() ).

    Mais bon de tte façon, avec mail() ou phpMailer, ça devrait fonctionner..


    Montre un peu ton code avec requête + la table de ta bdd; parce que là je vois pas du tout le prob...

  16. #16
    Membre habitué Avatar de Alexandrebox
    Profil pro
    Inscrit en
    Août 2006
    Messages
    635
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 635
    Points : 153
    Points
    153
    Par défaut
    Voici le code complet:

    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
    28
    29
    30
    31
    32
    33
    34
    <?php
    if($HTTP_POST_VARS['valider']== "ENVOYER"){
    $controle = $HTTP_POST_VARS['sousrubrique'];//Les membres de la catégorie sélectionnée
    $query_rsReference = "SELECT * FROM newsletter where sousrubrique = '$controle' ";
    $rsReference = mysql_query($query_rsReference , $maconnexion) or die("Problème lors de votre requête!");
    $row_result = mysql_fetch_assoc($rsReference);
    ?>
     
    <?php 
    $texte = $HTTP_POST_VARS['texte'];
    $lemessage = stripslashes($texte);
    $salutation = "Bonjour ";
    $note = "Liste de diffusion (Tout ensemble contre la violence)";
    $entete = "Reply-to: TECV <contact@monsite.com>\r\n";
    $entete .= "From: (Tout ensemble contre la violence<contact@monsite.com>\r\n";
    ?>
     
    <?php
    set_time_limit(0);
    do{
     
    $lemail = $row_result['email'];
    $lenom = $row_result['nom'];
     
    $msg = $salutation." ".$lenom.", \n\n";
    $msg .= $lemessage."\n\n";
    $msg .= $note."\n\n";
     
    mail($lemail, $objet, $msg, $entete);
    } 
    while($row_result = mysql_fetch_assoc($rsReference));
     
    }
    ?>
    La table, c'est une table avec 4 champs dont un ID auto_incrément, rien de spécial en ce qui concerne la table.
    Si tu peux m'aider, ça me sauvera

  17. #17
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    2 ptit trucs:

    - $HTTP_POST_VARS est obsolète, utilise plutôt $_POST.
    - quand tu fais une boucle do(..) while(mysql_fetch_assoc), mysql_fetch_assoc n'est pas éxécuté avant la première itération, donc $row_result est vide.. ca vient ptêt de là.

Discussions similaires

  1. [XL-2010] Envoyer en automatique depuis VBA Excel un mail à une liste de diffusion de Thunderbird
    Par RANDOLOISIRS dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 08/03/2014, 19h41
  2. [OL-2003] Ajouter des membres dans une liste de diffusion
    Par megapacman dans le forum VBA Outlook
    Réponses: 0
    Dernier message: 21/11/2011, 12h53
  3. [PHP 5.2] [Mail] Envoyer un e-mail avec des interruptions
    Par gtraxx dans le forum Langage
    Réponses: 6
    Dernier message: 21/01/2009, 23h49
  4. Réponses: 12
    Dernier message: 24/09/2008, 11h33
  5. [Mail] Extraire des informations d'une liste
    Par Justin_C dans le forum Langage
    Réponses: 2
    Dernier message: 02/02/2007, 11h00

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