Page 1 sur 1

Probleme avec la fonction mail

Posté : 30 janv. 2009, 19:49
par hakazizi
ma newsletter atteint presque les 200 membres.
pour le moment j'utilise ceci.
<?php require("connectionbd.php");
$message = $_POST['message'];
$sujet = $_POST['sujet']; 
if($sujet != NULL AND $message != NULL)
	     {
		  $maile = mysql_query("SELECT * FROM client");
		  while($mail = mysql_fetch_array($maile))
           {
		   $toutMembre = $mail['mail']; 
		   $entete = "From: [email protected]";		  
	           mail($toutMembre, $sujet, $message, $entete);
echo"le mail a ete envoyé à $toutMembre<br>";
		   }
		   }
		   else{
		   echo'ERREUR !';
} 

?>
</td>
</tr>
</table>
mon systeme certe fonctionnelle commence à me montrer ses limites.
temps de chargement trop long chaque mail est envoyer individuellement.
j'aurais voulu savoir si il n'y avais pas la possibilité d'envoyer le mail une seul fois a tous les destinataire.
et que chacun ne vois que sa propre adresse mail.
merci

Posté : 30 janv. 2009, 21:21
par AB
C'est indiqué dans la fonction mail() tu peux séparer tes adresses par une virgule.

Posté : 31 janv. 2009, 17:14
par hakazizi
Le probleme avec cette solution c'est que toutes les adresses sont afficher merci quand meme.

Posté : 31 janv. 2009, 17:26
par Stef
Bonjour haka (permets que j'abrège ce pseudo frivole!)

regarde ce code qui devrait répondre à tes attentes:
<?php
     // Plusieurs destinataires
     $to  = '[email protected]' . ', '; // notez la virgule
     $to .= '[email protected]';

     // Sujet
     $subject = 'Calendrier des anniversaires pour Août';

     // message
     $message = '
     <html>
      <head>
       <title>Calendrier des anniversaires pour Août</title>
      </head>
      <body>
       <p>Voici les anniversaires à venir au mois d\'Août !</p>
       <table>
        <tr>
         <th>Personne</th><th>Jour</th><th>Mois</th><th>Année</th>
        </tr>
        <tr>
         <td>Josiane</td><td>3</td><td>Août</td><td>1970</td>
        </tr>
        <tr>
         <td>Emma</td><td>26</td><td>Août</td><td>1973</td>
        </tr>
       </table>
      </body>
     </html>
     ';

     // Pour envoyer un mail HTML, l'en-tête Content-type doit être défini
     $headers  = 'MIME-Version: 1.0' . "\r\n";
     $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

     // En-têtes additionnels
     $headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
     $headers .= 'From: Anniversaire <[email protected]>' . "\r\n";
     $headers .= 'Cc: [email protected]' . "\r\n";
     $headers .= 'Bcc: [email protected]' . "\r\n";

     // Envoi
     mail($to, $subject, $message, $headers);
?>


source: http://fr2.php.net/manual/fr/function.mail.php

Posté : 31 janv. 2009, 17:43
par Ripat
Utiliser la fonction mail() pour des mail de masse n'est pas indiqué. Elle ouvre un socket par appel à la fonction 200 mails ---> 200 sockets. Il vaut bien mieux n'ouvrir qu'un socket et d'utiliser le protocole smtp pour l'envoi d'une série de mails.

Tu peux t'amuser à faire ça toi même mais tu vas vite buter sur les limites imposées par les serveurs mail. Tu devras alors commencer à gérer les code réponses etc... J'ai essayé (pour le sport), c'est possible mais pas évident. Heureusement, il y a une poire pour la soif: http://pear.php.net/package/Mail

Lis aussi cette discussion: http://www.phpfrance.com/forums/voir_re ... .php#82854

Posté : 31 janv. 2009, 18:56
par hakazizi
c'est quoi le smtp?
j'ai été voir la discution que tu m'as proposer ainsi que le site mais je ne comprend pas la langue de sheakspeer.
j'ai voulut telecharger mais la compression en .tar n'est pas prise en charge.
merci

Posté : 31 janv. 2009, 19:18
par Ripat
Jette un coup d'oeil ici: http://pear.php.net/manual/fr/package.mail.mail.php

Tu dois installer les paquets Mail et Net_SMTP. Si tu disposes d'un serveur dédié, c'est très facile. en ligne de commande:

Code : Tout sélectionner

# pear install Mail # pear install Net_SMTP
Sinon, il te faudra les télécharger, les décompresser et les mettre à un endroit accessibles par tes scripts, hors webroot.
http://pear.php.net/manual/fr/installat ... shared.ftp

Comme tu peux le voir dans l'exemple donné dans le post en lien, l'utilisation de la classe Mail est très simple. aussi simple que la fonction mail().

Edit:
Je viens de voir qu'il existe une interface web pour gérér les paquets Pear. Télécharge http://pear.php.net/go-pear, mets-le dans ton arborescence web, renomme le en go-pear.php et tu devrais t'en tirer (pas essayé).

Re-edit
Je viens de l'essayer. Hé, hé, pas mal! Idéal pour un mutualisé.

Posté : 31 janv. 2009, 20:35
par Stef
Wow, faut te suivre ripat! :D pas évident pour les débutants que nous sommes...

néanmoins tes posts m'ont motivé à m'intéresser à pear!

Posté : 01 févr. 2009, 16:37
par Anémone
Bonjour,

J'ai plus de 200 destinataires et aucun problème avec la fonction mail: je me suis juste réservé la possibilité de choisir le nombre de destinataires, et pour faire raisonnable, 50 par 50, ça marche très bien.
Pour n'avoir qu'une adresse qui s'affiche chez le destinataire, tu peux compléter ton script d'un UPDATE dans ton while,portant une condition quelconque (ex "a_bien_recu"), en sorte qu'à chaque incrémentation, le dernier destinataire traité ne vérifie plus la condition et est exclu de la liste des destinataires.

Thierry