Se connecter / S'enregistrer
Votre question

Bouton submit pour envoi de mail

Tags :
  • Script
  • Programmation
Dernière réponse : dans Programmation
14 Juin 2011 16:23:13

Bonjour à tous,

j'ai un script php qui affiche différentes informations et mon script envoie ses infos par mail automatiquement. Je souhaiterais que l'envoi de mail ne se fasse pas automatiquement mais uniquement si on appuie sur un bouton (de type submit ??)
Ci-dessous le code que j'utilise pour l'envoi de mail :
  1. //*****************ENVOI PAR MAIL*****************//
  2. $headers ='From: exemple@fai.net'."\n";
  3. $headers .='Reply-To: exemple@fai.net'."\n";
  4. $headers .='Content-Type: text/html; charset="utf-8"'."\n";
  5. $headers .='Content-Transfer-Encoding: 8bit';
  6. $destinataire = 'exemple@fai.fr';
  7. $sujet = 'Infos '.$libelle;
  8.  
  9.  
  10. ini_set("SMTP","192.168.92.15" );
  11.  
  12. if(mail($destinataire, $sujet, $message, $headers))
  13. {
  14. $message .= 'Le message a été envoyé';
  15. }
  16. else
  17. {
  18. $message .= 'Le message n\'a pu être envoyé';
  19. }
  20.  
  21. }


merci d'avance pour votre aide

Autres pages sur : bouton submit envoi mail

15 Juin 2011 09:41:09

Je pourrais pas utiliser le JS pr faire un truc du genre :

  1. <form method="POST" onsubmit="return confirm('Envoyer l\'email ?');">
  2. <input type="email" name="email" placeholder="email@example.fr" />
  3. <input type="submit" />
  4. </form>




help me please !
m
0
l
a c 145 L Programmation
15 Juin 2011 09:56:04

Oui, dans ta page d'affichage, il te faut un formulaire avec uniquement des champs cachés, et que l'action du formulaire soit une page qui ne fasse que l'envoi du mail.
Ou la même page, mais dans ce cas tu dois ajouter un champ qui permette de savoir que tu viens de soumettre ce formulaire, et encapsuler l'envoi du mail dans un if (la condition étant que ton champ soit donc rempli).
m
0
l
Contenus similaires
15 Juin 2011 10:09:29

Merci pour ta réponse crazycat, j'ai essayé ça mais l'envoi de mail ne se fait pas :

  1. <?php if(empty($_POST['envoi_email'])) : ?>
  2. <form method="POST">
  3. <p>Envoyer l'email ?</p>
  4. <p>
  5. <input type="submit" name="envoi_email" value="Oui" />
  6. <input type="button" onclick="location.href='traitementclient.php';" value="Non"/>
  7. </p>
  8. </form>
  9. <?php
  10. else :
  11. $headers ='From: exemple@fai.fr'."\n";
  12. $headers .='Reply-To: exemple@fai.fr'."\n";
  13. $headers .='Content-Type: text/html; charset="utf-8"'."\n";
  14. $headers .='Content-Transfer-Encoding: 8bit';
  15.  
  16. if(mail('exemple@fai.fr', 'Sujet', $message , $headers))
  17. {
  18. echo 'Le message a bien été envoyé';
  19. }
  20. else
  21. {
  22. echo 'Le message n\'a pu être envoyé';
  23. }
  24.  
  25. endif;
  26.  
  27. ?>
m
0
l
15 Juin 2011 14:09:26

Pouvez-vous m'aider ?
m
0
l
a c 145 L Programmation
15 Juin 2011 14:39:56

Si tu ne mets pas le contenu de ton formulaire précédent dans celui à, çe ne marchera pas.
Et il faut un champ hidden "name=envoi_mail et value="Oui" et ton submit normal.
m
0
l
15 Juin 2011 14:51:36

J'ai fait ça mais apparemment c'est pas bon :

  1. if(empty($_POST['envoi_email'])) : ?>
  2.  
  3. <p>Envoyer l'email ?</p>
  4. <p>
  5. <input type="submit" name="envoi_email" value="Oui" />
  6. <input type="hidden" name""envoi_email" value "Oui" />
  7. <input type="button" onclick="location.href='traitementclient.php';" value="Non"/>
  8.  
  9. </p>
  10. </form>
  11. <?php
  12. else :
  13. $headers ='From: exemple@fai.fr'."\n";
  14. $headers .='Reply-To: exemple@fai.fr'."\n";
  15. $headers .='Content-Type: text/html; charset="utf-8"'."\n";
  16. $headers .='Content-Transfer-Encoding: 8bit';
  17. if(mail('exemple@fai.fr', 'Sujet', $message , $headers))
  18. {
  19. echo 'Le message a bien été envoyé';
  20. }
  21. else
  22. {
  23. echo 'Le message n\'a pu être envoyé';
  24. }
  25. endif;
  26. }
  27. ?>


En fait, je pense que mon problème c'est que ma page est déjà constitué d'une liste déroulante qui affiche des informations en fonction de notre choix et du coup quand la page se recharge il n'y a plus de choix dans la liste déroulante donc mes variables se réinitialisent dc jsais pas trop comment faire ...
m
0
l
a c 145 L Programmation
15 Juin 2011 15:01:55

Bon, je réponds une dernière fois, mais je te prierai de faire un effort.
crazycat@idn a dit :
Si tu ne mets pas le contenu de ton formulaire précédent dans celui à, çe ne marchera pas.

  1. if (empty($_POST['envoi_email']) || ($_POST['envoi_mail']!="Oui")
  2. {?>
  3. <p>Envoyer l'email ?</p>
  4. <p>
  5. <form method="post">
  6. <input type="hidden" name""envoi_email" value "Oui" />
  7. <input type="hidden" name="message" value="<?php echo $message; ?>" />
  8. <input type="submit" value="Oui" />
  9. <input type="button" onclick="location.href='traitementclient.php';" value="Non"/>
  10. </form>
  11. </p>
  12. <?php
  13. }
  14. else
  15. {
  16. $headers ='From: exemple@fai.fr'."\n";
  17. $headers .='Reply-To: exemple@fai.fr'."\n";
  18. $headers .='Content-Type: text/html; charset="utf-8"'."\n";
  19. $headers .='Content-Transfer-Encoding: 8bit';
  20. if(mail('exemple@fai.fr', 'Sujet', $message , $headers))
  21. {
  22. echo 'Le message a bien été envoyé';
  23. }
  24. else
  25. {
  26. echo 'Le message n\'a pu être envoyé';
  27. }
  28. }
  29. ?>

Je ne mets que $message, mais il faut bien sûr que tu mettes tout ce qui est dans ton formulaire précédent (les valeurs envoyées bien sur) dans des champs hidden.
m
0
l
15 Juin 2011 15:11:25

Désolé crazycat, mais j'avais déjà essayé de passer le message en hidden, le problème c'est que, même s'il est en hidden il s'affiche donc c'est le gros fouilli dans ma page. Je ne sais pas si ça vient du fait que ma variable $message soit en réalité de nombreuses balises HTML.
m
0
l
a c 145 L Programmation
15 Juin 2011 15:32:39

Fais donc un base64_encode() de ton message. Sans oublier les base64_decode() lorsque tu as besoin du texte réel.
m
0
l
15 Juin 2011 15:46:22

Merci je n'ai plus le problème pour passer ma variable en hidden. Par contre, je comprends pas pourquoi mais il ne rentre pas dans la boucle else quand je clique sur oui et il ne fait pas d'envoi de mail.
m
0
l
a c 145 L Programmation
15 Juin 2011 16:17:50

Erreur de ma part. Si tu recopies sans vérifier, forcément ça coince.
  1. <input type="hidden" name""envoi_email" value "Oui" />

doit devenir:
  1. <input type="hidden" name="envoi_email" value="Oui" />
m
0
l
15 Juin 2011 17:27:47

Merci beaucoup crazycat, du coup j'ai opté pour le JS qui me permet en plus de spécifier l'adresse sue laquel je vais envoyer voici mon code si ça intéresse qqun :

  1. if((empty($_POST['email'])) || (!empty($_POST['libelle'])))
  2. {?>
  3. <form method="POST" onsubmit="return confirm('Envoyer l\'email ?');">
  4. <p align="center">
  5. <input type="email" name="email" placeholder="email@example.fr" />
  6. <input type="hidden" name="message" value="<?php echo base64_encode($message); ?>" />
  7. <input type="submit" />
  8. </p>
  9. </form>
  10.  
  11. <?php
  12. }
  13.  
  14. else
  15. {
  16. $destinataire = $_POST['email'];
  17. $message = base64_decode($_POST['message']);
  18. $headers ='From: adresse@fai.fr'."\n";
  19. $headers .='Reply-To: exemple@fai.fr'."\n";
  20. $headers .='Content-Type: text/html; charset="utf-8"'."\n";
  21. $headers .='Content-Transfer-Encoding: 8bit';
  22. if(mail($destinataire, 'Infos Clients', $message , $headers))
  23. {
  24. echo '<br><p style="text-align:center;"><span style="font-weight: bold; font-size: 1.2em;">Les infos ont bien été envoyé à l\'adresse suivante :<BR><BR></span><span style="text-decoration: italic; font-weight: bold;"><I>'.$destinataire.'</I></span></p>';
  25. }
  26. else
  27. {
  28. echo '<br><p style="text-align:center;"><span style="font-weight: bold; font-size: 1.2em;">Désolé le message n\'a pas pu être remis<BR><BR></span>';
  29. }
  30. }
  31.  
  32. ?>


Juste une dernière question, dans headers au moment où je précise l'adresse qui va être marqué de l'envoi, j'ai trouvé des infos pour pouvoir mettre un nom comme ça :
$headers ='From: "nom"<adresse@fai.fr>'."\n";

mais moi ça ne marche pas je suis obligé de spécifier uniquement une adresse, est-ce que tu peux me dire pourquoi ?

Encore merci pour ton aide
m
0
l
a c 145 L Programmation
15 Juin 2011 21:38:53

Il ne faut pas les guillemets :
  1. $headers = 'From: nom <adresse@fai.fr>'."\r\n";
m
0
l
16 Juin 2011 10:39:46

non ça ne marche toujours pas, j'ai ça comme erreur :

Warning: mail() [function.mail]: SMTP server response: 501 5.1.7 Invalid address in C:\xampp\htdocs\traitementclient.php on line 325
m
0
l
a c 145 L Programmation
16 Juin 2011 11:02:44

C'est peut-être $destinataire qui n'est pas bon.
As-tu essayé de faire un var_dump des variables utilisées dans ta fonction mail() ?
Et je rappelle que les lignes des entêtes email (headers) doivent finir par "\r\n" et non pas "\n"
m
0
l
16 Juin 2011 11:35:08

J'ai fait un var_dump de $destinataire, $message et $headers ce sont tous des string.

Et je pense pas que ça vienne de destinataire vu que le mail s'envoie quand je fait :
$headers ='From: example@fai.fr'."\r\n";
m
0
l
a c 145 L Programmation
16 Juin 2011 11:51:23

Moi, je veux voir le var_dump de $headers.
Ma boule de cristal commence à vraiment s'user la.
m
0
l
16 Juin 2011 12:00:13

lol ok désolé :

string(147) "From: nom Reply-To: exemple@ai.fr Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: 8bit "
m
0
l
a c 145 L Programmation
16 Juin 2011 12:17:37

Oh la la ! Je vais donc t'apprendre à faire un vrai var_dump:
  1. echo '<pre>', var_dump($headers), '</pre>';

Tu n'as pas l'impression que là il te manque des choses dans ton affichage ?
m
0
l
16 Juin 2011 12:40:02

Alors voilà le résultat :
string(147) "From: nom
Reply-To: lucas.richard@groupe-ocealis.com
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit
"

je sais pas trop d'où vient cette guillemet ?!?!
m
0
l
a c 145 L Programmation
16 Juin 2011 14:06:59

Affiche la source de la page obtenue pour voir si l'adresse mail est bien présente dans le From: (et copie donc la source ici)
m
0
l
16 Juin 2011 14:15:43

........<BR><pre>string(147) "From: nom <adresse@fai.fr>

Reply-To: lucas.richard@groupe-ocealis.com
Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: 8bit
"
</pre><br />
<b>Warning</b>: mail() [<a href='function.mail'>function.mail</a>]: SMTP server response: 501 5.1.7 Invalid address in <b>C:\xampp\htdocs\traitementclient.php</b> on line <b>325</b><br />
<br><p style="text-align:center;"><span style="font-weight: bold; font-size: 1.2em;">Désolé le message n'a pas pu être remis<BR><BR></span>
m
0
l
a c 232 L Programmation
16 Juin 2011 15:33:29

C'est pas la variable $destinataire qui pose problème plutôt ?
m
0
l
16 Juin 2011 15:50:28

Je pense pas que ça vienne de destinataire vu que le mail s'envoie quand je fait :

$headers ='From: example@fai.fr'."\r\n";
m
0
l
a c 145 L Programmation
16 Juin 2011 17:03:42

Je pense que le problème, c'est windows:
Citation :
L'implémentation de la fonction mail() sous Windows diffère de manière significative avec l'implémentation Unix. Tout d'abord, il n'utilise pas un programme local pour composer les messages, mais opère uniquement et directement sur les sockets, ce qui signifie qu'un MTA est nécessairement à l'écoute sur un socket du réseau (qui peut être soit sur le réseau local ou sur une machine distante).

Deuxièmement, les en-têtes personnalisés comme From:, Cc:, Bcc: et Date: ne sont pas interprétés par le MTA dans un premier temps, mais sont analysés par PHP.

De plus, le paramètre to ne doit pas être une adresse sous la forme "Quelque chose <quelqu_un@example.com>". La commande mail n'analysera pas correctement ceci lors de la discussion avec le MTA.
m
0
l
17 Juin 2011 09:27:51

OK merci beaucoup pour tes recherches crazycat !

ça veut donc dire qu'il n'est pas possible de faire ça sous Windows ?
m
0
l
a c 145 L Programmation
17 Juin 2011 09:30:40

Il semblerait bien.
Mais d'un autre côté, tu ne fais que développer sous windows ? A terme, ça sera hébergé sur une machine linux ?
m
0
l
17 Juin 2011 11:10:38

Je t'avoue que pour l'instant c'est sur Windows mais je ne sais pas si après, ça sera sur une machine linux. Cela dit, c'est pas trop grave si j'arrive pas à mettre un nom à la place de l'adresse.

Mais en tout cas, encore merci pour ton aide
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS