3. Email
Séance 3 : mails
Dans cette séance nous allons mettre en place un système de mail pour vérifier l'utilisateur lors de son inscription, et lui permettre de récupérer son mot de passe en cas d'oubli.
Envoyer des mails en PHP
L'envoi d'un email en php se fait en utilisant la fonction mail https://www.php.net/manual/fr/function.mail.php. Cette fonction permet d'envoyer des emails basiques. Bien souvent, sur de plus gros projets on utilisera des librairies qui permettront un plus grand contrôle et une écriture un peu plus simple, notamment si l'on souhaite intégrer des pièces jointes ou définir des en-têtes de manière précise.
Pour pouvoir envoyer des emails, il faut avoir un serveur SMTP. Il existe plusieurs solutions pour cela, mais la plus simple est d'utiliser un service en ligne comme https://mailtrap.io/. Il suffit de créer un compte, et de créer un serveur SMTP. Vous obtiendrez alors un username et un mot de passe, que vous pourrez utiliser dans votre code.
L'utilisation de la fonction mail est relativement simple, elle prend a minima les paramètres suivants :
le destinataire
le sujet
le message
Dans l'exemple ci-dessus, le message et le mail envoyé sont au format texte. Nous verrons un peu plus loin comment envoyer un message avec du HTML.
Si l'on souhaite préciser l'expéditeur, le mail de réponse, ... il faut définir le 4eme paramètre, qui comprend l'en-tête du mail. Sa structure est un peu particulière, vous avez un exemple ci-dessous.
Pour envoyer un email en HTML, il faut définir toute la page HTML dans le message, puis définir les headers afin de préciser que vous envoyer un email au format HTML. Ci-dessous un exemple avec également plusieurs destinataires.
Exercice
Ecrire un fichier PHP, hors projet MVC, qui vous envoie un email.
Envoi d'un mail de confirmation
Pour envoyer un mail de confirmation, nous allons utiliser la fonction mail. Nous allons également utiliser la fonction https://www.php.net/manual/fr/function.hash.php pour générer un hash aléatoire, qui servira de clé de vérification. Nous allons également utiliser la fonction https://www.php.net/manual/fr/function.time.php pour récupérer le timestamp actuel, qui servira à définir une chaîne aléatoire unique.
Vérifier la clé de vérification
Pour vérifier la clé de vérification, nous allons utiliser la fonction https://www.php.net/manual/fr/function.hash-equals.php. Cette fonction permet de comparer deux chaines de caractères de manière sécurisée. Elle permet notamment de s'assurer que les deux chaines de caractères ont la même longueur, et qu'aucun caractère n'a été modifié.
Exercice 1
Créer un formulaire d'inscription avec les champs suivants :
nom
prénom
email
login (si ce n'est pas le mail)
Ajoutez la route, la vue associée
Ajouter la route et la vue pour effectuer la sauvegarde dans la base de données et envoyer un mail de confirmation
Ajouter la route qui sera appelée par le lien du mail de confirmation
Mettez à jour la base de données pour activer l'utilisateur et supprimer la clé de vérification
Exercice 2
Gestion du mot de passe perdu. La logique serait assez similaire à l'exercice 1.
Ajoutez la route, la vue associée pour récupérer l'email de l'utilisateur ayant perdu son mot de passe
Ajoutez la route et la vue pour effectuer la sauvegarde dans la base de données et envoyer un mail avec un lien pour réinitialiser le mot de passe
Ajoutez la route et la vue pour réinitialiser le mot de passe, suite au clic sur le lien du mail, avec un formulaire permettant de saisir le nouveau mot de passe (pour sécuriser l'échange, il faut que le lien contienne un hash aléatoire, et que ce hash soit sauvegardé dans la base de données)
Ajoutez la route et la vue pour sauvegarder le nouveau mot de passe. Mettez à jour la base de données pour supprimer le hash aléatoire
Configurer un server SMTP en local
Avec Wamp sous windows
https://waytolearnx.com/2020/01/comment-configurer-wampserver-pour-envoyer-un-mail-depuis-localhost-en-php.html et https://grafikart.fr/blog/mail-local-wamp
Last updated