Mail avec PHP

Eléphanteau du PHP | 11 Messages

02 avr. 2008, 14:43

Bonjour,

Je voudrais envoyer un formulaire à partir d'un site WEB.

J'ai effectué pas mal de recherche, mais je n'arrive pas à faire parvenir le mail à destination.
Quelsqu'un peut-il maider. Je précise que je n'ai pas besoin d'enregister les données dans une base.

Voici mon script.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<?php
$TO = "[email protected]";
$h  = "From: " . $TO;
$message = "";
while (list($key, $val) = each($HTTP_POST_VARS)) {
  $message .= "$key : $val\n";
}
mail($TO, $subject, $message, $h);
Header("Location: http://formulaires1.ibelgique.com>");
?>


<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Document sans titre</title>
</head>

<body>
<div align=center>
<form method=POST action=formmail.php >
<input type=hidden name=subject value=formmail>
<table>
<tr><td>Votre Nom:</td>
    <td><input type=text name=realname size=30></td></tr>
<tr><td>Votre Email:</td>
    <td><input type=text name=email size=30></td></tr>
<tr><td>Sujet:</td>
    <td><input type=text name=title size=30></td></tr>
<tr><td colspan=2>Commentaires:<br>
  <textarea COLS=50 ROWS=6 name=comments></textarea>
</td></tr>
</table>
<br> <input type=submit value=Envoyer> -
     <input type=reset value=Annuler>
</form>
</div>


</body>
</html>
[Note : ce message a été posté de manière anonyme avant d'être réattribué à son auteur]

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

02 avr. 2008, 15:20

Modération :
mozart421, afin d'améliorer la lisibilité de ton message,
pense à utiliser les balises [code] ou [php] (selon le langage utilisé).

Elles sont disponibles au-dessus de la zone de saisie de ton message
lorsque tu postes un nouveau message.

Des indications sont disponibles sur la manière de mettre en forme vos messages dans la FAQ



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 :)

Sinon peux-tu donner plus d'informations sur les problèmes que tu rencontres ? as-tu des messages d'erreur ? que fait le script ? que devrait-il faire ? ...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphanteau du PHP | 11 Messages

02 avr. 2008, 15:58

Tout d'abor merci pour ta réponse, je vais essayer d'utiliser la balises correctes. :)

Voici le code en localhost

Code : Tout sélectionner

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <?php $TO = "[email protected]"; $h = "From: " . $TO; $message = ""; while (list($key, $val) = each($HTTP_POST_VARS)) { $message .= "$key : $val\n"; } mail($TO, $subject, $message, $h); Header("Location: http://formulaires1.ibelgique.com>"); ?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <title>Document sans titre</title> </head> <body> <div align=center> <form method=POST action=formmail.php > <input type=hidden name=subject value=formmail> <table> <tr><td>Votre Nom:</td> <td><input type=text name=realname size=30></td></tr> <tr><td>Votre Email:</td> <td><input type=text name=email size=30></td></tr> <tr><td>Sujet:</td> <td><input type=text name=title size=30></td></tr> <tr><td colspan=2>Commentaires:<br> <textarea COLS=50 ROWS=6 name=comments></textarea> </td></tr> </table> <br> <input type=submit value=Envoyer> - <input type=reset value=Annuler> </form> </div> </body> </html>
Mais que je fais une visualisation dan mon navigateur je reçois ceci
  • Notice: Undefined variable: subject in c:\program files\easyphp1-8\www\formulaire_contact\formulaire4.php on line 9

    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\formulaire4.php on line 9

    Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\formulaire_contact\formulaire4.php:2) in c:\program files\easyphp1-8\www\formulaire_contact\formulaire4.php on line 10

    Votre Nom:
    Votre Email:
    Sujet:
    Commentaires:
Les tableau est bien présent, je remplis les cases et je l'envoi. Je recçois ceci :

"page web introuvble HTTP 404"

Merci de m'avoir lu et peut-être pouvoir m'aider
Je sais qu'on ne sait jamais (Jean gabin)

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

02 avr. 2008, 16:09

Alors, dans l'ordre :

- 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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 422 Messages

02 avr. 2008, 16:19

Au niveau du php.ini :

Code : Tout sélectionner

error_reporting = E_ALL & ~E_NOTICE
Ca évite d'avoir ces avertissements (notices) qui ne sont pas des erreurs, mais juste des indications. Bien sûr, cela ne résoud pas le problème que ton sujet s'appelle title dans le formulaire et que tu essayes de relire $subject

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
N'oublie pas de relancer le serveur pour que les modifs de php.ini soient appliquées.

Si tu veux utiliser un serveur smtp en local, tu peux installer Postcastt server free edition

Ensuite HTTP_POST_VARS va devenir obsolète. Utilise $_POST

Eléphanteau du PHP | 11 Messages

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
Je sais qu'on ne sait jamais (Jean gabin)

Eléphant du PHP | 422 Messages

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 !

Eléphanteau du PHP | 11 Messages

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
Je sais qu'on ne sait jamais (Jean gabin)

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

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 ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 558 Messages

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é .

Eléphanteau du PHP | 11 Messages

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
Je sais qu'on ne sait jamais (Jean gabin)

Mammouth du PHP | 558 Messages

03 avr. 2008, 10:57

regarde ton php.ini

Eléphanteau du PHP | 11 Messages

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.
Je sais qu'on ne sait jamais (Jean gabin)

Mammouth du PHP | 558 Messages

03 avr. 2008, 11:14

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

Eléphanteau du PHP | 11 Messages

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:
Je sais qu'on ne sait jamais (Jean gabin)