erreur dans la fonction MAIL

Eléphant du PHP | 86 Messages

30 mai 2006, 10:05

voi la j'utilise la fonction mail pour une newsletter et cela me ressort une erreur avec "SMTP" je sais pas quoi

Voila deja mon code :
include'bdd.php';
  $requete="SELECT mailmembre FROM membre";
  $res=mysql_query($requete);

  $requete2="SELECT * FROM news ORDER BY 'idnews' DESC LIMIT 1 ";
  $res2=mysql_query($requete2);
  $vrai2=mysql_fetch_assoc($res2);

  While($vrai=mysql_fetch_assoc($res))
  {
  $to = $vrai['mailmembre'];
  $subject = 'Newsletter CRSU Amiens';
  $message = $vrai2['titrenews'].'    '.$vrai2['datenews']."\r\n"."\r\n".$vrai2['contenunews']."\r\n".'';

  $headers = 'From: [email protected]' . "\r\n" .
  'Reply-To: [email protected]' . "\r\n" .
  'X-Mailer: PHP/' . phpversion();

  //echo $to.'<br/>';
  //echo $message.'<br/>';
  mail($to, $subject, $message, $headers);
  }
et voila mon erreur :


Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in c:\stage\easyphp1-8\www\nouveau site stage\envoi_mail.php on line 26
Il me l'affiche deux fois car pour l'instant j ai deux adresse mail en memoire. Y aurait-il una façon plus rapide pour envoyer une newsletter a des centaines de gens??

Merci d'avance pour votre réponse
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Mammouth du PHP | 536 Messages

30 mai 2006, 10:14

il me smble qu'il faut que tu modifie l'adresse smtp qui pour l'instant est "localhost" dans le fichier php.ini
Un prof désespéré à son élève :
- Et maintenant, dessinez-moi un cercle au tableau... Voila... Alors qu'est-ce que c'est?
- Ben un cercle ?
- Non, c'est votre note, sortez !!

Eléphant du PHP | 86 Messages

30 mai 2006, 10:27

mais je sais pas du tout ou est le php.ini, je n'en utilise pas, et je ne sais pas ce qu'est le SMTP. :cry:

edit : désolé je n avai pas relu mon message, des que j ai vu mon ecriture, jai immédiatemment corrigé
Modifié en dernier par tinou le 30 mai 2006, 10:33, modifié 2 fois.
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

30 mai 2006, 10:31

modération : je veux bien croire que tu soit pressée de voir ton problème résolu mais je ne pense pas que ça justifie cette écriture.

Je te demande donc de reformuler ta dernière réponse parce que je n'ai pas tout compris et je ne pense pas être le seul ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 mai 2006, 10:53

Tu as nécessairement un fichier php.ini quelque part perdu et tout triste sur ton disque. C'est ce fichier qui contient les informations initiales nécessaires au démarrage de php. Tu vas y trouver la liste des modules actif de php (gd pour créer des images, pdf pour des pdf, ...) la gestion des sessions, des différentes bases de données, etc. et la configuration du serveur SMTP qui permet d'envoyer des emails.

Généralement il est planqué dans le dossier c:\windows, mais si ce n'est pas le cas, une recherche sur le disque devrait te permettre de le trouver :)

Si tu l'ouvres et que tu regardes dedans, tu devrais trouver la ligne

SMTP = localhost

Ce qui signifie qu'il va essayer d'utiliser la machine locale pour envoyer ses mails. Sauf que comme tu n'as très certainement pas de serveur d'envoi de mail sur ta machine, ben il y arrive pas (d'où ton message d'erreur). Il te suffit donc de virer le "localhost" et de le remplacer par le nom du smtp de ton fournisseur d'accès (que tu utilises quand tu créer un compte mail, il te demande généralement de saisir le pop et le smtp, tu dois donc pouvoir les y retrouver :))
Tu auras donc un truc du genre :

SMTP = smtp.tonFournisseur.truc

Il te suffit alors d'enregistrer les modification et de redémarrer php pour qu'elles soient prise en compte. Tu devrais alors normalement pouvoir envoyer des mails.

Eléphant du PHP | 86 Messages

30 mai 2006, 10:59

je te remercie, je vai essayer cela tout de suite.
Mais y a t il une solution plus rapide que la fonction MAIL? Je m'explique, pour l'instant j ai que deux membre enregistré, mais si j en ai 200, je ne crois pas que la fonction Mail soit super efficace.
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Mammouth du PHP | 1353 Messages

30 mai 2006, 11:02

Je pense que la fonction mail() peut etre très efficace si on l'utilise correctement :wink:

En effet, au lieu d'envoyer un mail à chacun des utilisateurs à chaque fois il te suffit dans le cadre d'une newsletter de récupérer tous les emails et de les mettres les un a la suite des autres dans une chaine de caractère, séparé par des ;. Par la suite cette chaine devient la liste des destinataires, et donc tu ne fais appel qu'une fois a la fonction mail() :)

ViPHP
ViPHP | 3607 Messages

30 mai 2006, 11:25

sauf que chaque destinataire pourra voir le mails des autres utilisateurs...
ce qui dans certains cas n'est pas souhaitable...

Mammouth du PHP | 1353 Messages

30 mai 2006, 11:28

sauf que chaque destinataire pourra voir le mails des autres utilisateurs...
ce qui dans certains cas n'est pas souhaitable...
Certes, mais existe t il d'autres possibilités que la fonction mail ?

ViPHP
ViPHP | 3607 Messages

30 mai 2006, 11:35

non mais si on a le temps, on peut faire un appel de la fonction mail() pour chaque adresse e-mail, c'est sur que c'est plus long mais bon...

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

30 mai 2006, 11:44

J'avais essayé il y a un p'tit moment et il me semble qu'en jouant avec les headers on peut mettre des destinataires en copies cachées (bcc). Il faut naturellement un destinataire principal qui sera visible, mais on peut très bien se l'envoyer dans ce cas...

Après, envoyer une newsletter par mail sans passer par mail() je vois pas trop... p't'etre via la poste ? ;)

Eléphant du PHP | 86 Messages

30 mai 2006, 11:44

oui mais le gars à qui je crée le site n'a pas forcement envie de rester des plombes devant son écran à attendre que l'envoi se termine. J'ai entendu parler de PEAR MAIL, qu'est ce que c'est?? :shock:
Comme dit le proverbe chinois:"Si tu parles a tes chaussons.....C'est que tu es le Roi des C..." :D

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

30 mai 2006, 11:48

C'est une classe qui permet justement d'envoyer facilement des emails et gère les emails en masse.

Elle est d'ailleurs conseillée directement dans la doc PHP si vous voulez envoyez des emails en grand nombre

=> http://pear.php.net/package/Mail