Se connecter avec
S'enregistrer | Connectez-vous

Bouton submit pour envoi de mail

Dernière réponse : dans Programmation

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

Lassé par la pub ? Créez un compte

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 !
Expert Programmation

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

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

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 ...
Expert Programmation

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.

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.

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
Expert Programmation

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"

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";

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 ?!?!

........<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>
Expert Programmation

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.

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
Lassé par la pub ? Créez un compte
Tom's guide dans le monde