Envoyer un message à partir d'un formulaire Web avec PHP

Envoi du contenu d'un formulaire en ligne à une adresse e-mail est l'une des applications les plus utiles de PHP. Ce n'est pas difficile; mais il est facile de faire une erreur. Dans cet article, je vais vous montrer comment éviter les pièges courants qui se posent lors de l'envoi du contenu d'un formulaire avec PHP.

Commencer

Pour garder les choses simples, je vais utiliser un formulaire avec seulement trois champs de saisie et un bouton d'envoi. Le code HTML ressemble à ceci:

Envoyer un message à partir d'un formulaire Web avec PHP

L'ouverture

balise contient deux attributs: la méthode et de l'action. L'attribut méthode indique au navigateur comment gérer les données lorsque le formulaire est soumis. Toujours mettre à poster pour le courrier électronique. Réglage du contenu du formulaire à l'URL, ce qui est mauvais et risque d'exposer des informations sensibles. L'attribut action indique au navigateur w ici pour envoyer les données de formulaire pour le traitement. Dans cet exemple, je te l'envoie à une page appelée acknowledge.php.

Le scénario qui traite le formulaire utilise l'attribut de nom de chaque élément d'entrée pour extraire les données. Ne jamais utiliser des espaces dans l'attribut name. Si vous voulez utiliser plusieurs mots, utilisez le cas de chameau, comme productName, ou un trait de soulignement (product_name).

Création de la page pour le script de traitement

Ainsi que le traitement des données de formulaire, le script confirmera si le message a été envoyé. Créer une page web avec le code HTML suivant dans la section, et l'enregistrer comme acknowledge.php dans le même dossier que le formulaire:

La page finira par utiliser la logique PHP pour afficher le message correct.

La collecte des données du formulaire

Pour accéder aux données d'un champ, il suffit d'ajouter son attribut nom entre guillemets dans une paire de crochets après $ _POST. Par exemple, $ _ POST [ « email »] contient la valeur de l'e-mail du nom de domaine.

Pour traiter le formulaire, vous devez vérifier qu'il a été soumis, puis construire le contenu du message électronique.

Le nom du bouton d'envoi dans mon formulaire est envoyé, donc cela confirme que $ _POST [ « envoyer »] existe-à-dire, la forme a été soumise. Si vous utilisez un autre nom pour le bouton d'envoi, changer pour correspondre. variables PHP sont sensibles à la casse: $ _POST ou $ _POST ne fonctionnera pas. Vérifier également que les parenthèses ouverture et de fermeture en jeu (il y a deux parenthèses de fermeture avant l'accolade d'ouverture).

Tout le code restant dans cette section va entre les accolades et ne sera exécutée que si le formulaire a été soumis.

2. Créez deux variables pour l'adresse où l'e-mail sera envoyé et le sujet de l'e-mail:

3. Commencer à construire le corps du message électronique sur la ligne suivante:

PHP utilise un point (période) à se joindre à des chaînes (texte) ensemble, donc cela ajoute la valeur du champ de nom au texte littéral « Nom: ». La ligne se termine par deux retours chariot et sauts de ligne. Notez que le \ r \ n \ r \ n est entre guillemets. Si vous utilisez des guillemets simples, vous obtiendrez \ r \ n \ r \ n texte littéral.

4. Le corps du message doit être une seule chaîne, il faut donc ajouter les autres champs en faisant précéder le signe égal avec un point comme celui-ci:

Vous n'avez pas besoin les retours chariot et les caractères de nouvelle ligne après le dernier champ.

5. Testez votre code jusqu'à présent en ajoutant la ligne suivante pour afficher le corps du message:

Envoyer un message à partir d'un formulaire Web avec PHP

Figure 1: Le contenu de tous les champs de formulaire ont été réunies en une seule chaîne.

Les retours chariot et des sauts de ligne ne sont pas affichés, mais vous pouvez vérifier leur existence en regardant le code source dans votre navigateur.

Envoi du courrier électronique
  1. Supprimer écho $ message; et le remplacer par le code suivant:

Ceci passe trois arguments à la fonction mail (): l'adresse e-mail est l'envoyé à la ligne de sujet, et du message. Si la fonction réussit à faire passer le message au MTA, $ le succès sera vrai.

2. Modifier la section de corps de la page comme celui-ci pour afficher le message approprié:

Envoyer un message à partir d'un formulaire Web avec PHP

Si $ le succès a été fixé, et s'il est vrai, le message « Thank You » est affiché. Dans le cas contraire, le message d'erreur est affiché. Le message d'erreur sera également affiché si quelqu'un essaie d'atteindre acknowledge.php sans soumettre le formulaire.

Ajout d'en-têtes de courriel

Même si vous avez reçu un e-mail à partir du script existant, vous voudrez certainement l'améliorer en ajoutant des en-têtes de courrier électronique. L'une des il est facile de répondre directement à l'expéditeur les en-têtes les plus utiles. Mais vous devez le faire correctement pour éviter de transformer votre formulaire en ligne dans un relais de spam.

1. Insérez une nouvelle ligne dans le script juste avant la ligne qui envoie l'e-mail, et créer un en-tête pour l'adresse de l'expéditeur comme ceci:

Je n'ai pas ajouté un retour chariot et le caractère de retour à la ligne parce que l'en-tête final sera ajouté que si l'adresse e-mail de l'expéditeur est valide.

3. Les pirates tentent d'exploiter le champ email des formulaires en ligne pour injecter des dizaines d'adresses e-mail et le contenu de spam, de sorte que vous devez valider l'adresse e-mail de l'expéditeur avant de l'ajouter aux en-têtes:

La fonction filter_input () prend trois arguments. Le premier indique que l'entrée a été envoyé par la méthode post. Le second est le nom du champ d'entrée. Le troisième argument spécifie comment vérifier l'entrée. Dans ce cas, il confirme que c'est une adresse e-mail unique. Les premier et troisième arguments sont des constantes PHP, et sont sensibles à la casse.

Si l'entrée ne ressemble pas à une adresse e-mail valide, la fonction retourne false. Dans le cas contraire, elle renvoie l'adresse, qui est stockée sous forme de courrier électronique $. La tête Reply-To est ajouté que si l'e-mail semble OK. Mettre le retour chariot et le caractère de nouvelle ligne au début a le même effet que l'ajouter à la fin de l'en-tête précédent.

4. Maintenant que vous avez défini les en-têtes de courriel supplémentaires, les transmettre comme le quatrième argument de la fonction mail ():

Vérifier que l'e-mail est d'une source fiable

De nombreuses sociétés d'hébergement nécessitent passer un cinquième tomail argument () pour vérifier qu'il provient d'une source de confiance. Ceci est votre propre adresse e-mail entre guillemets et précédé par -f (trait d'union-f). Si vous ne comprends toujours pas un e-mail après avoir ajouté les en-têtes supplémentaires, modifiez la ligne qui envoie le courrier comme celui-ci (en utilisant votre propre adresse e-mail dans l'argument final):

En apprendre plus sur e-mail et PHP

Dans cet article, je vous ai montré comment créer un script PHP de base pour envoyer des données à partir d'un formulaire en ligne à une adresse e-mail, et comment intégrer l'e-mail de l'expéditeur dans les en-têtes de courrier électronique sans se retourner votre formulaire dans un relais de spam.

Envoyer un message à partir d'un formulaire Web avec PHP

Articles Liés