Mail avec PHP

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Mail avec PHP

J'ai retravaillé mon code

par mozart421 » 03 avr. 2008, 11:45

Voila j'ai retravaillé mon code comme ceci :

Code : Tout sélectionner

<?php if(!empty($_POST['nom']) && !empty($_POST['email']) && !empty($_POST['objet'])){ $nom = $_POST['nom']; $email = $_POST['email']; $objet = $_POST['objet']; $message = $_POST['message']; $destinataire = '[email protected]' ; $headers = 'From : ' . $nom . '<' . $email . '>'; if(mail($destinataire, $objet, $message, $header)){ echo 'Votre email a été correctement envoyé'; } else echo 'Une erreur c\'est produite lors de l\'envoie de votre email';} else { echo 'Votre email n\'a pu être envoyé. Veuillez remplir le formulaire correctement';} ?>
Maintenant je ne vois pas le formulaire à l'écran, mais j'ai ceci :
Votre email n'a pu être envoyé. Veuillez remplir le formulaire correctement
C'est quoi un test ? Un scipt ? Et ou le placer ?
J'avance doucement :) mais j'y suis pas encore.
Merci de m'aidr encore un peu s'il vous plait :)

par Ryle » 03 avr. 2008, 11:45

Premier problème concernant ton script, lorsqu'on arrive sur la page du formulaire (donc sans l'avoir renseigné, ta fonction mail est exécutée. Elle ne devrait l'être qu'à condition d'avoir remplit le formulaire... il te manque un test :)

par hakazizi » 03 avr. 2008, 11:42

la c'est clair tu as des variables vide.
alors qu'elles devrais avoir des valeurs

par mozart421 » 03 avr. 2008, 11:39

EasyPHP1-8-->apache-->php.ini
ctrl+f
smtp
voila ensuite
SMTP = localhost
tu modifie localhost par un serveur valide.
Voilà j'ai changé le SMTP dans PHP.ini comme ceci :

[Syslog]
; Whether or not to define the various syslog variables (e.g. $LOG_PID,
; $LOG_CRON, etc.). Turning it off is a good idea performance-wise. In
; runtime, you can define these variables by calling define_syslog_variables().
define_syslog_variables = Off

[
mail function]
; For Win32 only.
SMTP = relay.skynet.be

; For Win32 only.
sendmail_from = [email protected]
Mainenant que j'ai relancé EasyPHP j'obtient ceci en prévisualisation, je n'ai même plus le formulaire qui s'acffiche :(
Notice: Undefined index: nom in c:\program files\easyphp1-8\www\formulaire_contact\envoyer.php on line 3

Notice: Undefined index: email in c:\program files\easyphp1-8\www\formulaire_contact\envoyer.php on line 4

Notice: Undefined index: objet in c:\program files\easyphp1-8\www\formulaire_contact\envoyer.php on line 5

Notice: Undefined index: message in c:\program files\easyphp1-8\www\formulaire_contact\envoyer.php on line 6
Votre email n'a pu être envoyé. Veuillez remplir le formulaire correctement
On y est pas encore je crois :( [/quote]

par Ryle » 03 avr. 2008, 11:34

Il te faut donc modifier ce fichier pour indiquer un serveur smtp valide (généralement celui de ton fournisseur d'accès :))
Lorsque tu récupères tes mails avec ton client de messagerie, tu as du lui dire : récupère mes mails avec l'adresse pop suivante que mon fournisseur d'accès internet a eu la bonté de fournir, et lorsque j'ai besoin d'envoyer des mails, envoi les avec l'adresse smtp que ton fai a eu la générosité de t'indiquer également.

PHP a besoin d'envoyer des mail, à toi de lui donner l'adresse smtp qui t'autorise à le faire pour qu'il en profite également :)
Toujours dans php.ini, pour l'envoi d'email

Code : Tout sélectionner

[mail function] ; For Win32 only. SMTP=smtp de ton FAI (smtp.free.fr par exemple) smtp_port = 25 ; For Win32 only. sendmail_from = ton email chez ton FAI

par mozart421 » 03 avr. 2008, 11:25

Voila ce que je vois, SMTP est par défaut localhost
[mail function]
; For Win32 only.
SMTP = localhost

; For Win32 only.
sendmail_from = [email protected]
Mais un serveur valide c'est quoi ? je mets quoi à la place de localhost ?

Merci, je crois qu'on avance :oops:

par hakazizi » 03 avr. 2008, 11:14

EasyPHP1-8-->apache-->php.ini
ctrl+f
smtp
voila ensuite
SMTP = localhost
tu modifie localhost par un serveur valide.

par mozart421 » 03 avr. 2008, 11:03

Ok, mais j'ai déjà eu une réponse hier de CAROUBE, j'ai fait ce qu'il m'a dit, mais je ne sais pas ou se trouve le PHP.ini, quand j'ai fait ce que Caroube me disait, j'ai obtenu une autre page pleine de rensignements, mais je ne sais lesquels je dois garder, ou mette les infos etc...

Je crois que ce n'est pas très compliqué pour vous, mais moi je suis encore trop novice.
Si quelqu'un pouvait me le dire une bonne fois, j'aurais plus ce problème. J'essaie d'apprendre...

Un grand merci en tous ças.

par hakazizi » 03 avr. 2008, 10:57

regarde ton php.ini

par mozart421 » 03 avr. 2008, 10:45

- Undefined variable: subject .. line 9
Tu utilises la variable $subject ligne 9 de ton script, mais tu ne l'as pas déclaré au préalable, ni affectée de valeur

- Failed to connect to mailserver at "localhost" port 25, verify your "SMTP"
PHP a tenté d'envoyer le mail, il a pour cela contacté le serveur smtp (qui permet d'envoyer des mails) qui a été défini dans le fichier php.ini. Seul problème, c'est que dans le fichier ini, le smtp spécifié est localhost (qui est généralement la valeur par défaut) or, en local sur ton poste, il n'y a pas de smtp d'installé.
Il te faut donc modifier ce fichier pour indiquer un serveur smtp valide (généralement celui de ton fournisseur d'accès )

- Cannot modify header information - headers already sent
PHP t'informe qu'il ne peut faire de redirection car le navigateur a déjà reçu des éléments (en l'occurence les messages d'erreur ci dessus). Il suffit donc de les corriger pour voir partir ce message également


C'est ça que je comprends pas, je sais pas quoi mettre ni ou ... je sais pas ou trouver ces infos.
Y a pas un tuto quelque part, qui expliqurait tout ça ?

Merci

par hakazizi » 03 avr. 2008, 10:39

désoler d'intervenir ici mais est-ce qu'il est posiible de créer un serveur smtp et surtout est-ce très compliqué.
si cela ne l'est pas trop je vais essayé mais si c'est trop complexe je vais attendre d'avoir plus de connaissance.
c'est juste par curiosité .

par Ryle » 03 avr. 2008, 10:38

Il est assez amusant de constater qu'en changeant de script plutôt que de corriger le précédent, tu obtiens exactement les mêmes erreurs... :)

Faut-il te ré-expliquer comment les corriger ? ou comptes-tu à nouveau changer de script et constater que le prochain ne fonctionnera pas plus, tant que tu n'auras pas fait les modifications que nous t'avons indiqué plus haut ?

Voilà

par mozart421 » 03 avr. 2008, 10:10

Bonjour à tous,

J'ai essayer un autre script qui pourrait aussi me convenir, losrque je fais une prévisualisation (en localhost), le formulaire apparait bien. J'ai fais deux fichiers dont voici les codes :
Fichier "contact.html"

Code : Tout sélectionner

<html> <body> <h1>Formulaire de contact</h1> <form action="envoyer.php" method="post"> <p> Nom : <br /> <input type="text" name="nom" /> </p> <p> Email : <br /> <input type="text" name="email"/> </p> <p> Objet de l'email : <br /> <input type="text" name="objet"/> </p> <p> Message : <br /> <textarea name="message" rows="7" cols="21"></textarea> </p> <p><input type="submit" value="Envoyer"/></p> </form> </body> </html>
Le fichier PHP "envoyer.php

Code : Tout sélectionner

<?php $nom = $_POST['nom']; $email = $_POST['email']; $objet = $_POST['objet']; $message = $_POST['message']; $destinataire = [email protected]' ; $headers = 'From : ' . $nom . '<' . $email . '>'; if($nom == '' AND $email == '' AND $objet == '' AND $message == '') { echo 'Votre email n\'a pu être envoyé. Veuillez remplir le formulaire correctement'; $verification = false; } else $verification = true; if($verification != false) { /*Vérification du retour de la fonction*/ if( mail($destinataire, $objet, $message, $header) ) { echo 'Votre email a été correctement envoyé'; } else echo 'Une erreur c\'est produite lors de l\'envoie de votre email'; } ?>
Je remplis tous les champs, mais à l'envois je recois ceci :
Notice: Undefined variable: header in c:\program files\easyphp1-8\www\formulaire_contact\envoyer.php on line 26

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:\program files\easyphp1-8\www\formulaire_contact\envoyer.php on line 26
Une erreur c'est produite lors de l'envoie de votre email
La ligne 26 est celle ci :

Code : Tout sélectionner

if( mail($destinataire, $objet, $message, $header) )
Quelqu'un pourrait-il m'expliquer ce que je dois changer pour que ca fonctionne, et à quel endroit je dois le mettre ? Où je peux les trouver aussi ?
Un tout grand merci

par caroube » 02 avr. 2008, 16:58

pour trouver où se trouve php.ini, tu fais une page appelée phpinfo.php et tu y mets seulement
<?php phpinfo(); ?>
Tu exécutes cette page http://localhost/phpinfo.php et ... tu lis !

C'est bien gentil

par mozart421 » 02 avr. 2008, 16:49

Tout ça, mais je crois que je suis encore trop débutant pour ce genre de chose. :cry: Par exemple je ne sais pas ou se trouve le PHP.ini. :?: je ne sais ou introduire les info SMTP etc.. :oops: :oops:

S'il y avit un bon tutoriel quelque part que je pourrais suivre, je crois que ça m'aiderai beaucoup aussi.

En tous cas un grand merci pour votre aide. :D