Je souhaite envoyer un courrier électronique avec PHP lorsqu'un utilisateur a fini de remplir un formulaire HTML, puis de lui envoyer des informations par courrier électronique. Je veux le faire à partir du même script qui affiche la page Web contenant le formulaire.
J'ai trouvé ce code, mais le courrier n'envoie pas.
<?php
if (isset($_POST['submit'])) {
$to = $_POST['email'];
$subject = $_POST['name'];
$message = getRequestURI();
$from = "[email protected]";
$headers = "From:" . $from;
if (mail($to, $subject, $message, $headers)) {
echo "Mail Sent.";
}
else {
echo "failed";
}
}
?>
Quel est le code pour envoyer un email en PHP?
Si je comprends bien, vous souhaitez avoir tout dans une page et l'exécuter à partir de la même page.
Vous pouvez utiliser le code suivant pour envoyer un courrier à partir d'une seule page, par exemple index.php
ou contact.php
La seule différence entre celle-ci et ma réponse initiale est le <form action="" method="post">
où l'action a été laissée en blanc.
Il est préférable d'utiliser header('Location: thank_you.php');
au lieu de echo
dans le gestionnaire PHP pour rediriger l'utilisateur vers une autre page.
<?php
if(isset($_POST['submit'])){
$to = "[email protected]"; // this is your Email address
$from = $_POST['email']; // this is the sender's Email address
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$subject = "Form submission";
$subject2 = "Copy of your form submission";
$message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
$message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];
$headers = "From:" . $from;
$headers2 = "From:" . $to;
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";
// You can also use header('Location: thank_you.php'); to redirect to another page.
}
?>
<!DOCTYPE html>
<head>
<title>Form submission</title>
</head>
<body>
<form action="" method="post">
First Name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
Email: <input type="text" name="email"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
Je ne savais pas trop quelle était la question, mais j'ai l'impression qu'une copie du message doit être envoyée à la personne qui a rempli le formulaire.
Voici une copie testée/de travail d’un formulaire HTML et d’un gestionnaire PHP. Ceci utilise la fonction PHP mail()
.
Le gestionnaire PHP enverra également une copie du message à la personne qui a rempli le formulaire.
Vous pouvez utiliser deux barres obliques //
devant une ligne de code si vous n’allez pas l’utiliser.
Par exemple: // $subject2 = "Copy of your form submission";
ne sera pas exécuté.
<!DOCTYPE html>
<head>
<title>Form submission</title>
</head>
<body>
<form action="mail_handler.php" method="post">
First Name: <input type="text" name="first_name"><br>
Last Name: <input type="text" name="last_name"><br>
Email: <input type="text" name="email"><br>
Message:<br><textarea rows="5" name="message" cols="30"></textarea><br>
<input type="submit" name="submit" value="Submit">
</form>
</body>
</html>
(Utilise les informations du formulaire HTML et envoie le courrier électronique)
<?php
if(isset($_POST['submit'])){
$to = "[email protected]"; // this is your Email address
$from = $_POST['email']; // this is the sender's Email address
$first_name = $_POST['first_name'];
$last_name = $_POST['last_name'];
$subject = "Form submission";
$subject2 = "Copy of your form submission";
$message = $first_name . " " . $last_name . " wrote the following:" . "\n\n" . $_POST['message'];
$message2 = "Here is a copy of your message " . $first_name . "\n\n" . $_POST['message'];
$headers = "From:" . $from;
$headers2 = "From:" . $to;
mail($to,$subject,$message,$headers);
mail($from,$subject2,$message2,$headers2); // sends a copy of the message to the sender
echo "Mail Sent. Thank you " . $first_name . ", we will contact you shortly.";
// You can also use header('Location: thank_you.php'); to redirect to another page.
// You cannot use header and echo together. It's one or the other.
}
?>
Pour envoyer au format HTML:
Si vous souhaitez envoyer un courrier au format HTML et pour les deux instances, vous devez créer deux ensembles d'en-têtes HTML distincts avec des noms de variables différents.
Lisez le manuel sur mail()
pour apprendre à envoyer des emails au format HTML:
Notes de bas de page:
Vous devez spécifier l'URL du service qui gérera les données soumises à l'aide de l'attribut d'action.
Comme indiqué à la section https://www.w3.org/TR/html5/forms.html sous 4.10.1.3 Configuration d'un formulaire pour communiquer avec un serveur . Pour des informations complètes, consultez la page.
Par conséquent, action=""
ne fonctionnera pas en HTML5.
La syntaxe appropriée serait:
action="handler.xxx"
ouaction="http://www.example.com/handler.xxx"
.Notez que xxx
sera l'extension du type de fichier utilisé pour gérer le processus. Cela pourrait être une extension de fichier .php
, .cgi
, .pl
, .jsp
, etc.
Consultez le Q & R suivant sur Stack en cas d'échec de l'envoi du courrier:
Envoyer un e-mail de PHP dans Windows est un peu un champ de mines avec des pièges et des maux de tête. Je vais essayer de vous expliquer une situation où je l’ai fait fonctionner sous Windows 7 et PHP 5.2.3 sous (IIS) sur le serveur Web Internet Information Services.
Je suppose que vous ne voulez utiliser aucun framework pré-construit tel que CodeIgniter ou Symfony, qui contient une fonctionnalité d'envoi de courrier électronique. Nous allons envoyer un courrier électronique à partir d'un fichier autonome PHP. J'ai acquis ce code sous le codeigniter (sous system/libraries) et l'ai modifié afin que vous puissiez simplement déposer ce fichier Email.php et qu'il devrait fonctionner.
Cela devrait fonctionner avec les nouvelles versions de PHP. Mais tu ne sais jamais.
Étape 1, vous avez besoin d’un nom d’utilisateur/mot de passe avec un serveur SMTP:
J'utilise le serveur smtp de smtp.ihostexchange.net
qui est déjà créé et configuré pour moi. Si vous n'avez pas cela, vous ne pouvez pas continuer. Vous devriez pouvoir utiliser un client de messagerie comme Thunderbird, evolution, Microsoft Outlook , pour spécifier votre serveur smtp, puis pouvoir envoyer des courriels par là.
Étape 2, créez votre fichier de courrier électronique Hello World:
Je suppose que vous utilisez IIS. Donc créez un fichier nommé index.php sous C:\inetpub\wwwroot
et mettez ce code dedans:
<?php
include("Email.php");
$c = new CI_Email();
$c->from("[email protected]");
$c->to("[email protected]");
$c->subject("Celestial Temple");
$c->message("Dominion reinforcements on the way.");
$c->send();
echo "done";
?>
Vous devriez pouvoir visiter ce fichier index.php en accédant à localhost/index.php dans un navigateur. Cela produira des erreurs, car Email.php est manquant. Mais assurez-vous que vous pouvez au moins le lancer depuis le navigateur.
Étape 3, créez un fichier nommé Email.php
:
Créez un nouveau fichier nommé Email.php sous C:\inetpub\wwwroot
.
Copiez/collez ce code PHP dans Email.php:
https://github.com/sentientmachine/standalone_php_script_send_email/blob/master/Email.php
Comme il existe de nombreux types de serveurs smtp, vous devrez modifier manuellement les paramètres situés en haut de Email.php
. Je l'ai configuré pour qu'il fonctionne automatiquement avec smtp.ihostexchange.net
, mais votre serveur smtp peut être différent.
Par exemple:
\n
.Le code lié est trop long pour coller en tant que réponse stackoverflow. Si vous souhaitez le modifier, laissez un commentaire ici ou via github et je le changerai.
Étape 4, assurez-vous que votre extension ssl est activée dans votre php.ini:
Trouvez votre fichier PHP.ini et décommentez le
;extension=php_openssl.dll
Donc, il ressemble à:
extension=php_openssl.dll
Étape 5, exécutez le fichier index.php que vous venez de créer dans un navigateur:
Vous devriez obtenir le résultat suivant:
220 smtp.ihostexchange.net Microsoft ESMTP MAIL Service ready at
Wed, 16 Apr 2014 15:43:58 -0400 250 2.6.0
<[email protected]> Queued mail for delivery
lang:email_sent
done
Étape 6, vérifiez votre courrier électronique et votre dossier de courrier indésirable:
Visitez le compte de messagerie pour [email protected] et vous devriez avoir reçu un email. Il devrait arriver dans 5 ou 10 secondes. Si vous ne le faites pas, inspectez les erreurs renvoyées sur la page. Si cela ne fonctionne pas, essayez de masquer votre visage au clavier sur Google tout en scandant: "travailler à l'épicerie n'est pas si mal."
Vous pouvez également utiliser l'application Mandrill pour envoyer le courrier en php. Vous obtiendrez l'API de https://mandrillapp.com/api/docs/index.php.html où vous pourrez trouver tous les détails sur les courriels envoyés et d'autres détails.
Si ce n'est déjà fait, examinez votre php.ini
et assurez-vous que les paramètres définis dans le paramètre [mail function]
sont correctement définis pour activer le service de messagerie. Après que vous puissiez utiliser la bibliothèque PHPMailer et suivez les instructions.
Voici les paramètres de messagerie PHP que j'utilise:
//Mail sending function
$subject = $_POST['name'];
$to = $_POST['email'];
$from = "[email protected]";
//data
$msg = "Your MSG <br>\n";
//Headers
$headers = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=UTF-8\r\n";
$headers .= "From: <".$from. ">" ;
mail($to,$subject,$msg,$headers);
echo "Mail Sent.";
Vous devez ajouter un action
à votre formulaire comme ceci:
<form name='form1' method='post' action='<?php echo($_SERVER['PHP_SELF']);'>
<!-- All your input for the form here -->
</form>
Placez ensuite votre extrait de code en haut du document et envoyez le courrier. Ce que echo($_SERVER['PHP_SELF']);
fait est qu'il envoie vos informations en haut de votre script afin que vous puissiez les utiliser.
Vous avez besoin d’un serveur SMPT pour
... mail($to,$subject,$message,$headers);
travailler.
Vous pouvez essayer des serveurs SMTP légers comme xmailer