Mailing : fonction mail() ou autre ??

Mailing : fonction mail() ou autre ?? - PHP - Programmation

Marsh Posté le 15-04-2008 à 18:26:14    

Bonjour,
 
j'ai deja poste au meme sujet mais j'ai pas eu de reponses : http://forum.hardware.fr/hfr/Progr [...] m#t1690372
 
je repose ma question autrement :)
quelle fonction me conseillez vous utiliser afin de realiser ce que je dois faire: selectionner des destinataires depuis la base de donnees et envoyer un mail avec une ou plusieurs pieces attachees...?
 
ou sinon, voyez vous un probleme ds le script que j'ai mis ??
 
merci de votre aide
Reda


Message édité par redah75 le 15-04-2008 à 18:29:41
Reply

Marsh Posté le 15-04-2008 à 18:26:14   

Reply

Marsh Posté le 15-04-2008 à 18:48:44    

Je pense pas que ton script est un réel problème mais c'est pas toujours évident ce genre de fonction, franchement je suis d'accord avec naeh, PHPMailer est l'idéal pour les maillings list ou les newsletters, tu ne feras jamais mieux et ca s'adaptera sans problème.

Reply

Marsh Posté le 15-04-2008 à 19:13:51    

pour plus de réponse il faudrait que tu puisse déterminer quel type (taille, etc) de fichier coince, il faudrait resserrer un peu les mailles du filet si j'ose dire...  
 
Je me demande si il ne manque pas un /n a la fin de la ligne 63 (il faut pas une ligne vide apres les données ??)... je dit ça mais moi non plus je suis pas très calé en mail... =) dit moi ce que t'en pense.

Reply

Marsh Posté le 16-04-2008 à 11:40:34    

merci les gars pour vos reponses :)
 
masterpsx : je vais voir ce que je pex faire concernant PHPMailer, je ne m'y connais vrmt pas!!
 
wrksx : j'ai bien mis un '\n' a la fin de la ligne 63 mais ca n'a rien change :( je suis tres embete, je ne sais quoi faire :(
 
ce qui est bizarre c'est que certain fichiers sont bons, mais d'autres non, c peut etre au moment de l'encodage que ca foire...!!

Reply

Marsh Posté le 16-04-2008 à 12:02:58    

je rajoute encore autre chose, qui rend les choses tres mysterieuses : les fichiers qui ne s'ouvrent pas sur les autres ordi, s'ouvrent sur mon ordi, je ne sais vraiment pas pk, la seule chose qui differe c'est que moi j'ai vista et les autres xp!!

Reply

Marsh Posté le 16-04-2008 à 12:09:33    

PHPMailer est une class, ca ne t'empechera pas de créer ta propre fonction pour ton script mais au lieu d'utiliser simplement la fonction mail() de php, tu utilises ses fonctions qui sont trés complétes (smtp, fichiers joint, envoie multiple ect...).  
 
Je comprend que tu veuilles créer tout toi-même mais pour certaine choses (mail, status serveur, pdf ect...) il vaut mieux parfois utiliser des class connus et au point.

Reply

Marsh Posté le 16-04-2008 à 12:41:32    

oui t'as raison, j'ai deja commence a lire la doc sur PHPMailer. tu n'aurais pas par hasard un lien pour ca? g trouve http://stephaneey.developpez.com/t [...] phpmailer/ mais qui date de 2004, je ne sais pas si c'est toujours d'actualite :)
 
j'aimerai aussi te poser qlq question quant a l'utilisation de cette classe si ca ne te derange pas.
y a t il un moyen plus simple de faire un envoi multiple et peronnalise? avec mail je fesais :
 

Code :
  1. $sel = mysql_query("SELECT prenom, nom, email FROM annuaire WHERE ...." );
  2. while($res = mysql_fetch_array($sel))
  3. {
  4. $text = "Cher $res[prenom] $res[nom]<br> ......"
  5. mail(......);
  6. }


 
quel est a ton avis le meilleur moyen de gerer ce mailing: sauvegarder les destinataires ds une bdd ou ds une variable de session de type tableau...??
 
Merci


Message édité par redah75 le 16-04-2008 à 13:09:06
Reply

Marsh Posté le 16-04-2008 à 13:17:14    

Ca fait un moment que je code plus trop et n'ai pas regardé cette class mais si tu ouvre le fichier README, il y a un exemple assez simple. Sinon le site officiel si tu comprend un peu l'anglais : http://phpmailer.codeworxtech.com/tutorial.html
 
Disons que de mémoire tu pourrais ne rajouter que l'adresse email dans ta boucle au lieu de faire un envoie pour chaque membre mais si ton email est personalisé (nom et prénom) ca reviendra au même.

Reply

Marsh Posté le 16-04-2008 à 13:37:56    

OK, donc il y a pas un moyen autre qu'envoyer le mail autant de fois que le nombre des destinataires???
cela ne posera pas de probleme au niveau spams???

Reply

Marsh Posté le 16-04-2008 à 13:58:54    

si tu envoi de nombreux mails il te faudra certainement étaler les envoi dans le temps pour ne pas surcharger le serveur.

Reply

Marsh Posté le 16-04-2008 à 13:58:54   

Reply

Marsh Posté le 16-04-2008 à 14:27:22    

oooh lala!! ca je ne saurais pas le faire :D

Reply

Marsh Posté le 16-04-2008 à 14:48:55    

redah75 a écrit :

OK, donc il y a pas un moyen autre qu'envoyer le mail autant de fois que le nombre des destinataires???
cela ne posera pas de probleme au niveau spams???


Ca depend, si tu veut personalisé le message avec le nom du membre non sinon oui c'est possible, en ce qui concerne le serveur ca dependra du nombre de membre, de ton hebergeur, de la maniére dont tu envois les emails (smtp ou mail()) ect... Pour etaler, c'est pas forcement compliqué, tu peut rajouter un champ dans ta table pour le statut d'envoie par exemple et limiter l'envoie groupé à un certain nombre  (50, 100 ect...).

Reply

Marsh Posté le 17-04-2008 à 12:01:42    

ca commence mal, je n'arrive meme pas a faire fonctionner phpmailer :(
j'ai suivi a la lettre l'installation : http://phpmailer.codeworxtech.com/install.html & http://phpmailer.codeworxtech.com/tutorial.html, mais lorsque je veux envoyer un mail test, ca fait rien et ca m'affiche rien sur la page!!
 
voici mon code, y voyez vous une erreur???
 

Code :
  1. require("class.phpmailer.php" );
  2. $mail = new PHPMailer();
  3. $mail->IsSMTP(); // telling the class to use SMTP
  4. $mail->Host = "smtp.domaine.com"; // SMTP server
  5. $mail->From = "mailing@domaine.com";
  6. $mail->AddAddress("web@domaine.com" );
  7. $mail->Subject = "First PHPMailer Message";
  8. $mail->Body = "Hi! \n\n This is my first e-mail sent through PHPMailer.";
  9. $mail->WordWrap = 50;
  10. if(!$mail->Send())
  11. {
  12.    echo 'Message was not sent.';
  13.    echo 'Mailer error: ' . $mail->ErrorInfo;
  14. }
  15. else
  16. {
  17.    echo 'Message has been sent.';
  18. }
  19. ?>
  20. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  21. <html>
  22. <head>
  23. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  24. <title>Document sans titre</title>
  25. </head>
  26. <body>
  27. Bonjour
  28. </body>
  29. </html>


 
merci encore une fois de votre aide

Reply

Marsh Posté le 17-04-2008 à 12:09:21    

ou sinon, que pensez vous de la classe mime.mail est elle mieux que phpmailer?

Reply

Marsh Posté le 17-04-2008 à 12:31:13    

C'est sur que si c'est le code de ta page, ca marchera jamais, tu n'as même pas ouvert php, le smtp est optionel commence par un truc simple et verifie que ta class se trouve au bon endroit :
 
<?php
require("class.phpmailer.php" );
$mail = new PHPMailer();
$mail->From = "tonmail@hotmail.com";
$mail->AddAddress("tonemaildetest@hotmail.com" );
$mail->Subject = "First PHPMailer Message";
$mail->Body = "Hi! \n\n This is my first e-mail sent through PHPMailer.";
 
if(!$mail->Send())
{
   echo 'Message was not sent.';
   echo 'Mailer error: ' . $mail->ErrorInfo;
}
else
{
   echo 'Message has been sent.';
}
?>  
 

Reply

Marsh Posté le 17-04-2008 à 13:13:14    

wow, alors la g rien compris, maintenant que j'ai enleve SMTP ca marche bien :) a quoi ca sert alors de d'utiliser le SMTP? quels sont les avantages et inconvenients?
 
l'ouverture de la balise php etait un oublie lorsque j'ai copie le code pour le poster :)

Reply

Marsh Posté le 17-04-2008 à 13:21:56    

j'ai trouve ca :
What mailer gives me the best performance?  
On a single machine the mail() or sendmail mailers give you the best performance because they do not have the added overhead of SMTP. If you have you have your mail server on a another machine then SMTP is your only option, but you do get the benefit of redundant mail servers.
 
devrais alors oublie SMTP et utiliser la methode Mail ??

Reply

Marsh Posté le 17-04-2008 à 13:22:41    

Le smtp c'est pour utiliser un serveur smtp de courrier tout simplement mais dans ce cas il faut préciser ton serveur voir le nom d'utilisateur et le mot de passe si besoin. Si tu avais laissé les valeurs par defaut, ca peut pas marcher évidement (vu que le serveur n'existe pas) et en les supprimant ca utilisera la fonction mail() de PHP tout simplement :)
 
PS : Je connais pas mime.mail désolé

Reply

Marsh Posté le 17-04-2008 à 13:27:37    

et quest ce que tu me conseilles utiliser?? mail ou smtp? sachant que je vais devoir faire des mailing qui peuvent depasser 1000 ou 2000 destinataires, avec 1 ou plusieurs pieces attachees...
 
j'oublie maintenant mime mail puisque phpmailer a l'air de bien marcher ;)

Reply

Marsh Posté le 17-04-2008 à 13:59:37    

Difficile a dire, ca depend de ton hebergeur aussi, il est fréquent qu'il y est des restrictions à ce niveau d'ou l'interet d'utiliser un serveur smtp dans ce cas, sinon mail() est probablement plus rapide.

Reply

Marsh Posté le 17-04-2008 à 14:28:25    

je suis en dedie chez OVH, et le SMTP semble pose probleme!!
je vais donc utiliser Mail() et te tiendrai au courant... ;)
juste une petite precision, Mail() est attribue par defaut si on met pas $mail->IsMail(); ???
 
et une derniere question :)
pour les fichier attaches telecharges depuis un formulaire, quel est le meilleur moyen de les stocker, ds une base de donnees au format blob ou ds un dossier sur le serveur??
 
Merci bien


Message édité par redah75 le 17-04-2008 à 14:30:33
Reply

Marsh Posté le 17-04-2008 à 15:07:32    

Pas besoin de IsMail(), dailleur ca existe cette fonction dans cette class ? Tu dois juste préciser si tu veut utiliser smtp.
 
Peut importe pour les fichiers attachés, si tu l'upload via un formulaire, il sera envoyé sur le serveur donc a toi de voir si tu veut le stocker avant ou pendant. Tu dois juste utiliser la fonction AddAttachment()  de la class mais je peut pas t'en dire beaucoup plus, j'ai jamais essayé cette fonctionalité, j'ai toujours envoyé simplement des mails au format HTML.

Reply

Marsh Posté le 17-04-2008 à 15:40:09    

Ok merci bp ;)
 
Oui IsMail() existe ds cette classe :) : http://stephaneey.developpez.com/t [...] mailer/#L5

Reply

Marsh Posté le 21-04-2008 à 18:49:34    

Bonjour, j'espere que vous avez passe un bon week end :)
je suis encore de retour avec des nouvelles questions :)
 
y a t il un moyen de mettre un accuse de reception?
apparement le X-Confirm-Reading-To ne fonctionne pas correctement!!
 
masterpsx : tu m'avais conseille d'etaler les envoi dans le temps pour ne pas surcharger le serveur, pourras tu me donner plus de details stp? je ne vois vraiment pas cmt faire!!
 
Merci bien
Reda

Reply

Marsh Posté le 22-04-2008 à 10:24:47    

Je crois pas que phpmailer a une option pour les accusés de reception, en même temps si c'est pour une newsletter encore heureux, tu veut pas recevoir 2000 accusés je suppose.
Je connais pas du tout "X-Confirm-Reading-To" désolé, je peut pas t'aider la dessus, comme je te l'ai dis mon utilisation de cette class ou de la fonction mail s'est toujours limité a du classique, a savoir envois d'email au format html et texte.
 
C'est pas moi qui t'est conseillé de scinder tes envois, c'est wrksx, c'est effectivement une bonne idée si ton hebergeur te limite et que tu as beaucoup de membre.
 
 Comme je te l'ai dis plus haut, tu peut par exemple rajouter un champ "status" (1 ou 0 par exemple) dans ta table membre (ou abonné à la newsletter) que tu met à jour lors de l'envoie du mail, de cette façon tu sais a qui tu as envoyé déja le mail. Ensuite rien de plus simple de vérifier si le champ est a 1 et de rajouter une limite dans ta requéte mysql. (exemple pour n'envoyer que 50 email : WHERE status = 0 ORDER BY id LIMIT 0, 50).

Reply

Marsh Posté le 22-04-2008 à 10:48:59    

Je pense avoir trouve la solution :) je te la donne, elle te/vous sera peut etre utile un jour ;)
j'ai telecharge et installe la derniere version phpmailer v2 qui contient une propriete de confirmation: $ConfirmReadingTo
http://phpmailer.codeworxtech.com/properties.html
 
ah, desole wrksx, g attribue ton idee a qlq un d'autre :)
 
OK, pour le principe, g compris, mais comment envoyer les 50 premiers mails ds un premier temps, puis qlq secondes ou minutes apres, j'envoie 50 autres ainsi de suite... ??
deja, comment pourrais je savoir si mon serveur est limite ou s'il sature?? je suis sur un serveur dedie.

Reply

Marsh Posté le 22-04-2008 à 11:28:54    

redah75 a écrit :

OK, pour le principe, g compris, mais comment envoyer les 50 premiers mails ds un premier temps, puis qlq secondes ou minutes apres, j'envoie 50 autres ainsi de suite... ??
deja, comment pourrais je savoir si mon serveur est limite ou s'il sature?? je suis sur un serveur dedie.


Il faudra le faire manuellement, c'est le plus simple, quand a ton serveur qui sature, je suppose que tu auras un message d'erreur si c'est le cas ou que le mail ne sera pas envoyé.

Reply

Marsh Posté le 22-04-2008 à 12:34:14    

OK, merci, je v voir ce que je peux faire ;)

Reply

Marsh Posté le 22-04-2008 à 12:44:56    

je ne pense pas que ce soit 'ton' serveur qui risque de saturer mais plutôt le smtp que tu utilise.. d'ailleur chez ovh c'est particulier, ils s'occupent eux meme de l'etalement dans le temp de tes envois.
 
http://forum.ovh.com/showthread.php?t=31770
 
http://www.phpcs.com/infomsg_FONCT [...] 08157.aspx


Message édité par wrksx le 22-04-2008 à 12:48:49
Reply

Marsh Posté le 22-04-2008 à 13:56:42    

ah ca c une bonne nouvelle qu'OVH temporise les envois :)
mais le probleme est que j'utilise pas la classe SMTP :( c'est pas grave?

Reply

Marsh Posté le 22-04-2008 à 14:15:31    

Je pense que wrksx ne parle pas du smtp que tu configures avec phpmailer mais de celui utilisé par ton serveur dédié pour envoyer les mails.
 
Si tu est chez ovh, tu n'as pas a te soucier du nombre de mail apparement, c'est eux-même qui temporise les envois.

Reply

Marsh Posté le 22-04-2008 à 14:35:23    

ok cool :), merci ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed