Page 1 sur 2

Mail avec PHP

Posté : 02 avr. 2008, 14:43
par mozart421
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]

Posté : 02 avr. 2008, 15:20
par Ryle
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 ? ...

Je vais essayer

Posté : 02 avr. 2008, 15:58
par mozart421
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

Posté : 02 avr. 2008, 16:09
par Ryle
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 :)

Posté : 02 avr. 2008, 16:19
par caroube
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

C'est bien gentil

Posté : 02 avr. 2008, 16:49
par mozart421
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

Posté : 02 avr. 2008, 16:58
par caroube
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 !

Voilà

Posté : 03 avr. 2008, 10:10
par mozart421
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

Posté : 03 avr. 2008, 10:38
par Ryle
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 ?

Posté : 03 avr. 2008, 10:39
par hakazizi
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é .

Posté : 03 avr. 2008, 10:45
par mozart421
- 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

Posté : 03 avr. 2008, 10:57
par hakazizi
regarde ton php.ini

Posté : 03 avr. 2008, 11:03
par mozart421
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.

Posté : 03 avr. 2008, 11:14
par hakazizi
EasyPHP1-8-->apache-->php.ini
ctrl+f
smtp
voila ensuite
SMTP = localhost
tu modifie localhost par un serveur valide.

Posté : 03 avr. 2008, 11:25
par mozart421
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: