Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 08h22   #1
 
zinat Mohamed
Inscription : novembre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : zinat Mohamed

Informations forums :
Inscription : novembre 2010
Messages : 28
Points : -1
Points : -1
Par défaut envoyer le contenu d'un formulaire de contact par email

Bonjour à tous,
voila ce que je veux faire :
http://www.martiusweb.net/contact.html
j'ai fait beaucoup de recherche et je me suis tombée sur ce tutoriel qui explique bien le code.
http://a-pellegrini.developpez.com/tutoriels/php/mail/
j'ai essayé le code mais ça ne marche pas .
je travaille avec wampserver ,j'ai configurer le serveur SMTP comme suite :
Code :
1
2
3
4
5
6
7
8
[mail function]
SMTP = localhost
smtp_port = 25
; For Win32 only.
sendmail_from = <a href="mailto:mon_nom@hotmail.com">mon_nom@hotmail.com</a>
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; <a href="http://php.net/sendmail-path" target="_blank">http://php.net/sendmail-path</a>
;sendmail_path =
j'ai fait copier coller de la page send_email.php qui fait le traitement de formulaire et l'envoie par email, mais à la fin de cette page il ya un formulaire et l'action vers une page" index.php " je ne pas cette page ,pour le moment je ne fais qu'un test alors je n'ai que la page de formulaire et celle du traitement,quoi faire ?
voici la page sen_email.php


Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
<?php
/* Si le formulaire est envoyé alors on fait les traitements */
if (isset($_POST['envoye']))
{
    /* Récupération des valeurs des champs du formulaire */
    if (get_magic_quotes_gpc())
    {
      $civilite		= stripslashes(trim($_POST['civilite']));
      $nom	     	= stripslashes(trim($_POST['nom']));
      $expediteur	= stripslashes(trim($_POST['email']));
      $sujet		= stripslashes(trim($_POST['sujet']));
      $message		= stripslashes(trim($_POST['message']));
    }
    else
    {
      $civilite		= trim($_POST['civilite']);
      $nom		    = trim($_POST['nom']);
      $expediteur	= trim($_POST['email']);
      $sujet		= trim($_POST['sujet']);
      $message		= trim($_POST['message']);
    }
    
    /* Expression régulière permettant de vérifier si le 
    * format d'une adresse e-mail est correct */
    $regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
    
    /* Expression régulière permettant de vérifier qu'aucun 
    * en-tête n'est inséré dans nos champs */
    $regex_head = '/[\n\r]/';
    
    /* Si le formulaire n'est pas posté de notre site on renvoie 
    * vers la page d'accueil */
    if($_SERVER['HTTP_REFERER'] != 'http://www.monsite.com/send_email.php')
    {
      header('Location: http://www.monsite.com/');
    }
    /* On vérifie que tous les champs sont remplis */
    elseif (empty($civilite) 
           || empty($nom) 
           || empty($expediteur) 
           || empty($sujet) 
           || empty($message))
    {
      $alert = 'Tous les champs doivent être renseignés';
    }
    /* On vérifie que le format de l'e-mail est correct */
    elseif (!preg_match($regex_mail, $expediteur))
    {
      $alert = 'L\'adresse '.$expediteur.' n\'est pas valide';
    }
    /* On vérifie qu'il n'y a aucun header dans les champs */
    elseif (preg_match($regex_head, $expediteur) 
            || preg_match($regex_head, $nom) 
            || preg_match($regex_head, $sujet))
    {
        $alert = 'En-têtes interdites dans les champs du formulaire';
    }
    /* Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail */
    elseif (!isset($_COOKIE['sent']))
    {
        /* Destinataire (votre adresse e-mail) */
        $to = 'moi@domaine.com';
      
        /* Construction du message */
        $msg  = 'Bonjour,'."\r\n\r\n";
        $msg .= 'Ce mail a été envoyé depuis monsite.com par '.$civilite.' '.$nom."\r\n\r\n";
        $msg .= 'Voici le message qui vous est adressé :'."\r\n";
        $msg .= '***************************'."\r\n";
        $msg .= $message."\r\n";
        $msg .= '***************************'."\r\n";
        
        /* En-têtes de l'e-mail */
        $headers = 'From: '.$nom.' <'.$expediteur.'>'."\r\n\r\n";
        
        /* Envoi de l'e-mail */
        if (mail($to, $sujet, $msg, $headers))
        {
            $alert = 'E-mail envoyé avec succès';
            
            /* On créé un cookie de courte durée (ici 120 secondes) pour éviter de 
            * renvoyer un mail en rafraichissant la page */
            setcookie("sent", "1", time() + 120);
            
            /* On détruit la variable $_POST */
            unset($_POST);
        }
        else
        {
            $alert = 'Erreur d\'envoi de l\'e-mail';
        }
          
    }
    /* Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST */
    else
    {
        unset($_POST);
    }
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="fr">
<head>
    <title>Contactez moi</title>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
</head>
<body>

<?php
if (!empty($alert))
{
    echo '<p style="color:red">'.$alert.'</p>';
}
?>
[B]<form action="index.php" method="post">[/B]
    <p>
        <label for="civilite">Civilité :</label>
        <select id="civilite" name="civilite">
            <option 
                value="mr"
                <?php 
                    if (!isset($_POST['civilite']) || $_POST['civilite'] == 'mr')
                    {
                        echo ' selected="selected"';
                    }
                ?>
            >
                Monsieur
            </option>
            <option 
                value="mme"
                <?php 
                    if (isset($_POST['civilite']) && $_POST['civilite'] == 'mme')
                    {
                        echo ' selected="selected"';
                    }
                ?>
            >
                Madame
            </option>
            <option 
                value="mlle"
                <?php 
                    if (isset($_POST['civilite']) && $_POST['civilite'] == 'mlle')
                    {
                        echo ' selected="selected"';
                    }
                ?>
            >
                Mademoiselle
            </option>
        </select>
    </p>
    <p>
        <label for="nom">Nom/Prénom :</label>
        <input type="text" id="nom" name="nom" 
        	value="<?php echo (isset($_POST['nom'])) ? $nom : '' ?>" 
        />
    </p>
    <p>
        <label for="email">E-mail :</label>
        <input type="text" id="email" name="email" 
        	value="<?php echo (isset($_POST['email'])) ? $expediteur : '' ?>"
        />
    </p>
    <p>
        <label for="sujet">Sujet :</label>
        <input type="text" id="sujet" name="sujet" 
        	value="<?php echo (isset($_POST['sujet'])) ? $sujet : '' ?>"
        />
    </p>
    <p>
        <label for="message">Message :</label>
        <textarea id="message" name="message" cols="40" rows="4">
			<?php echo (isset($_POST['message'])) ? $message : '' ?>
        </textarea>
    </p>
    <p>
        <input type="submit" name="envoye" value="Envoyer" />
    </p>
</form>

</body>
</html>
besoin de votre aide s'il vous plaît
zinat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 08h42   #2
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Salut

Quel rapport il y a t-il avec MySQL ?

Code :
sendmail_from = <a href="mailto:mon_nom@hotmail.com">mon_nom@hotmail.com</a>
Il ne faut pas mettre de HTML ici, ça n'a aucun sens.
De plus, le sendmail_from n'attend pas le nom d'une adresse mail, mais le nom du serveur de messagerie.

Le plus simple pour faire des essais en local c'est d'utiliser le nom du serveur de messagerie de son FAI.

Et coté serveur, le mieux est d'utiliser le serveur de messagerie lié à son domaine (si c'est en option il vaut mieux en prendre/acheter un, ça peu éviter de se faire blacklister où que ces mails soient considérés comme du Spam).


Un conseil au passage.
Il peut être utile/intéressant d'utiliser des outils genre Phpmailer ou Swiftmailer, particulièrement si on crée des mails en HTML, avec pièces jointes, etc ...
Ca évite de tout coder soit même, il y a juste un apprentissage de la librairie (et la maintenir aussi).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 11h16   #3
 
zinat Mohamed
Inscription : novembre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : zinat Mohamed

Informations forums :
Inscription : novembre 2010
Messages : 28
Points : -1
Points : -1
salut ,tout d'abord merci de m'avoir répondu
Citation:
Envoyé par RunCodePhp Voir le message

Quel rapport il y a t-il avec MySQL ?

Code :
sendmail_from = <a href="mailto:mon_nom@hotmail.com">mon_nom@hotmail.com</a>
Il ne faut pas mettre de HTML ici, ça n'a aucun sens.
De plus, le sendmail_from n'attend pas le nom d'une adresse mail, mais le nom du serveur de messagerie.
Ah oui effectivement vous avez raison ,apparemment j'ai mal configuré SMTP ,à présent je travaille en local et je veux recevoir les email sur hotmail comment ferais-je??
Citation:
Le plus simple pour faire des essais en local c'est d'utiliser le nom du serveur de messagerie de son FAI.
question bête
si j'ai pas de serveur de messagerie comme outlouk ... comment faire?

Citation:
Un conseil au passage.
Il peut être utile/intéressant d'utiliser des outils genre Phpmailer ou Swiftmailer, particulièrement si on crée des mails en HTML, avec pièces jointes, etc ...
Ca évite de tout coder soit même, il y a juste un apprentissage de la librairie (et la maintenir aussi).
merci pour ce conseil précieux ,ce que je veux faire c'est un formulaire de contact avec les champs( nom,siteweb,email,sujet,message)+un boutton envoyer qui m'envoie les valeurs de champs remlpis sur mon email et un boutton annuler qui vide tous les champs .
je suis encore débutante en php , pourriez-vous m'aider je vous en serais très reconnaissante
zinat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 14h42   #4
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
si j'ai pas de serveur de messagerie comme outlouk ... comment faire?
Outlook n'est pas un serveur de messagerie, mais un client de messagerie. Il sert à réceptionner et à envoyer des mails (via un serveur de mail).
Lors de son installation, il demandera entre autre le nom du serveur de mail (serveur SMTP).

Tu dois avoir une boite mail de ton FAI (ton Fournisseur d'Accès Internet), car à mon sens tous les FAI fournissent au moins une boite mail, donc un serveur de mail (je serais étonné du contraire).
C'est quelque chose comme : smtp.orange.fr (pour Orange par exemple)
Ca peut aussi quelque chose comme : mail.monfai.com
Si c'est le protocole SMTP qui est utilisé, ce n'est pas toujours le cas, ça dépend de ton FAI.
Ton FAI a dû te fournir ces infos là au même titre que ton adresse mail.


Après ça, tu pourras envoyer des mails en local vers une adresse hotmail (par le biais de ton serveur de mail de ton FAI).
Ceci est pour faire des essai en local bien sûr.


Coté serveur (ton hébergeur), là il te faudrait obtenir un serveur de mail lié à ton domaine (c'est un conseil).
Là aussi les choses peuvent varier.
Le serveur de mail n'utilise pas forcément SMTP, souvent sendmail. Mais l'hébergeur fourni toutes les infos pour ce faire.
Mais les config sont bien souvent plus simples car l'hébergeur le fait automatiquement, il y a juste à utiliser la fonction mail() de Php et ça fonctionne.
Faut voir.
D'ailleurs, est que l'offre que tu as pris coté hébergeur comprend un nom de domaine et aussi un serveur de mail ?

En tout cas ne mélange pas tout.
En local ça demandera de faire certain paramétrages spécifiques en local.
Et coté serveur (hébergement), pareil.
Ce qui veut dire qu'il y aura au minimum une alternative pour faire fonctionner une même page aussi bien en local que coté serveur.

Mais fait d'abord 1 seul coté, comme en local par exemple.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 18h36   #5
 
zinat Mohamed
Inscription : novembre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : zinat Mohamed

Informations forums :
Inscription : novembre 2010
Messages : 28
Points : -1
Points : -1
Pour le moment je veux le tester côté local ,j'ai reconfiguré le SMTP dans php.ini pour pouvoir envoyer les mail dans ma boite hotmail j'ai fait comme suite
Code :
1
2
3
4
5
6
7
8
[mail function]
SMTP = localhost
smtp_port = 25
; For Win32 only.
sendmail_from = smtp.live.com
; For Unix only.  You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
;sendmail_path =
est-ce juste?
zinat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h21   #6
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Je n'ai jamais configuré hotmail, du coup je ne peux pas te dire si ce nom de serveur "smtp.live.com" est correcte.
Est-ce que tu l'as vu écris quelque part ?

Si c'est bien un serveur SMTP et que ce nom est correcte, alors c'est au niveau de SMTP qu'il faut le mettre :
Code :
1
2
3
[mail function]
SMTP = smtp.live.com
smtp_port = 25
Faudrait aussi vérifier/confirmer que le port (ici 25) soit le bon, ce n'est pas toujours le cas, des fois c'est le port 587.
A vérifier ça aussi sur ton courrier papier ou mail ou autre.


Mais je ne comprend pas pourquoi tu te focalise à vouloir utiliser hotmail comme serveur de mail.
Je l'ai déjà expliqué. Ce n'est pas parce qu'on souhaite envoyer des mails vers hotmail qu'il faut que ce soit hotmail comme serveur de mail.

Pour exemple, si tu veux envoyer des mails à 10 personnes/amis différents qui ont tous des mails/Provider différents (orange, hotmail, gmail, etc ...) tu ne vas pas créer/paramétrer autant de serveurs de mail, non ?

Bref ... un serveur de mail et une boite sont 2 choses différentes.

Je t'assure que c'est plus simple (et plus fiable aussi) d'utiliser en local le serveur de mail de ton FAI que hotmail.
Ton FAI a dû te fournir toutes ces infos là, soit par courrier papier ou par mail ou ceci peut être récupéré via ton compte client sur le Net du FAI.

Ceci dit, pourquoi pas hotmail, ça doit être possible.
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/01/2012, 20h50   #7
 
zinat Mohamed
Inscription : novembre 2010
Messages : 28
Détails du profil
Informations personnelles :
Nom : zinat Mohamed

Informations forums :
Inscription : novembre 2010
Messages : 28
Points : -1
Points : -1
Citation:
Je n'ai jamais configuré hotmail, du coup je ne peux pas te dire si ce nom de serveur "smtp.live.com" est correcte.
Est-ce que tu l'as vu écris quelque part ?
oui.
Citation:
Si c'est bien un serveur SMTP et que ce nom est correcte, alors c'est au niveau de SMTP qu'il faut le mettre :
Code :
1
2
3
[mail function]
SMTP = smtp.live.com
smtp_port = 25
pour le sendmail_from = "je met mon email??"
Citation:
Faudrait aussi vérifier/confirmer que le port (ici 25) soit le bon, ce n'est pas toujours le cas, des fois c'est le port 587.
A vérifier ça aussi sur ton courrier papier ou mail ou autre.


Mais je ne comprend pas pourquoi tu te focalise à vouloir utiliser hotmail comme serveur de mail.
Je l'ai déjà expliqué. Ce n'est pas parce qu'on souhaite envoyer des mails vers hotmail qu'il faut que ce soit hotmail comme serveur de mail.

Pour exemple, si tu veux envoyer des mails à 10 personnes/amis différents qui ont tous des mails/Provider différents (orange, hotmail, gmail, etc ...) tu ne vas pas créer/paramétrer autant de serveurs de mail, non ?

Bref ... un serveur de mail et une boite sont 2 choses différentes.

Je t'assure que c'est plus simple (et plus fiable aussi) d'utiliser en local le serveur de mail de ton FAI que hotmail.
Ton FAI a dû te fournir toutes ces infos là, soit par courrier papier ou par mail ou ceci peut être récupéré via ton compte client sur le Net du FAI.

Ceci dit, pourquoi pas hotmail, ça doit être possible.
1. je sais que mon FAI est plus fiable mais pour le moment je préfère tester mon code sur le local si ça marche ,sinon je me demande si j'utilise la classe phpmailer est ce j'aurai besoin de cette configuration de SMTP ou bien ça se configure automatique ??
2. est-ce la classe PHPmailer() peut s'utiliser dans une seule page? ou bien l’appellation de cette classe se fait au début de la page traitement de formulaire avec include?
zinat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2012, 06h51   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 727
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 727
Points : 3 294
Points : 3 294
Citation:
1. je sais que mon FAI est plus fiable mais pour le moment je préfère tester mon code sur le local si ça marche ,sinon je me demande si j'utilise la classe phpmailer est ce j'aurai besoin de cette configuration de SMTP ou bien ça se configure automatique ??
Je ne cesse de dire que, utiliser le serveur de mail de ton FAI c'est justement pour faire des essais en local.
Je sais que j'insiste un peu (beaucoup), m'enfin ...
Ne confondrais tu pas ton FAI (Fournisseur d'Accès Internet) avec ton hébergeur ?


J'ai lu (certes en diagonal) que hotmail réclamerait apparemment une authentification + SSL et peut être autre chose encore, ce qui risque fort de compliquer les choses.
J'ai remarqué aussi que beaucoup se cassent les dents en voulant utiliser @live comme serveur SMTP en Php.

De l'autre, je doutes qu'en utilisant ton FAI le SSL et autre soit obligatoire.
(A mon sens tu ne te rends pas compte que tu te complique la tâche, alors que de mon coté j'essaie de t'orienter au plus simple vu que tu débute).

Si c'est un serveur SMTP (c'est le cas de hotmail), alors il y a juste à renseigner la ligne du "SMTP" et le "port".
Tu peux cepedant mettre ton adresse email dans la ligne "sendmail_from" (juste : zinat@hotmail.com par exemple), ça ne mange pas d'pain.

Citation:
2. est-ce la classe PHPmailer() peut s'utiliser dans une seule page? ou bien l’appellation de cette classe se fait au début de la page traitement de formulaire avec include?
Il faudra bien évidemment inclure la classe de PhpMailer avant d'en faire usage.
Fais des recherches, il y a pas mal de tutos qui explique cela.

Si tu utilises PhpMailer, il n'y aura pas besoin d'intervenir dans le php.ini, il faudra définir tous les paramètres dans le code (smtp, port, etc ...).

Je te colle un code trouvé pour Gmail pour exemple (ça doit être à peu près la même chose pour @live).
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
require "../libraries/phpmailer/phpmailer.php";
 
$mail = new PHPmailer();
$mail->IsSMTP();
$mail->IsHTML(true);
$mail->Host = 'ssl://smtp.gmail.com:465';
$mail->SMTPAuth = TRUE;
$mail->Username = 'votrelogin@gmail.com';  
$mail->Password = 'votremdp';  
$mail->From = 'email@votredomaine.com'; 
$mail->FromName = 'XXXXX'; 
$mail->AddAddress($email);
$mail->AddReplyTo('email@votredomaine.com');    
$mail->Subject='XXXXX';
$mail->Body='Test'; 
 
if (!$mail->Send()) { 
 
      echo $mail->ErrorInfo; 
 
      echo 'Erreur lors de l&rsquo;envoi de l&rsquo;email';
}
else {      
    echo 'Mail envoy&eacute;';
}
 
$mail->SmtpClose();
unset($mail);
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h09.


 
 
 
 
Partenaires

Hébergement Web