MON 1.2 : Apprendre à envoyer des mails en Backend
- MON
- 2024-2025
- temps 1
- smtp
- vert
- Kévin BERNARD
Ce MON a pour objectif d'expliquer comment envoyer des emails dans différents langages de programmation et de garantir la sécurité dans les échanges.
Connaissances de base en programmation (HTML, JavaScript, PHP, Python).
Table des matières
1. Introduction
L'objectif de ce MON est de découvrir les différentes façons d'envoyer un email dans différents langages de manière sécurisée.
Qu'est-ce que SMTP ?
SMTP est le protocole qu'utilise notre ordinateur pour acheminer les emails d'un client à un destinataire (le serveur de messagerie).
2. Exemples de code
2.1 Envoi d'email avec HTML
Avec HTML, il n'est pas possible d'envoyer des emails directement, mais on peut créer un formulaire ou un lien qui ouvre la boîte mail (prêt à send) via mailto
.
Exemple de lien mailto
:
html
<a href="mailto:someone@example.com?subject=Bonjour&body=Comment ça va ?">
Envoyer un email
</a>
🚨 Limitation : Cette méthode dépend de la messagerie de celui qui clique sur le lien et n'envoie pas automatiquement d'email.
2.2 Envoi d'email avec Node.js (Nodemailer)
Nodemailer est une bibliothèque très populaire quand on utilise JavaScript pour envoyer des emails.
Installation :
bash
npm install nodemailer
Exemple de code :
javascript
const nodemailer = require('nodemailer');
let transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'votreEmail@gmail.com',
pass: 'votreMotDePasse'
}
});
let mailOptions = {
from: 'votreEmail@gmail.com',
to: 'destinataire@example.com',
subject: 'Test Email',
text: 'Hello world!'
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
console.log(error);
} else {
console.log('Email envoyé : ' + info.response);
}
});
2.3 Envoi d'email avec Python (smtplib)
En Python, on utilise la bibliothèque smtplib pour envoyer des emails via le protocole SMTP.
Exemple de code :
python
import smtplib
from email.mime.text import MIMEText
sender = 'votreEmail@gmail.com'
receiver = 'destinataire@example.com'
msg = MIMEText('Hello, ceci est un email envoyé via Python!')
msg['Subject'] = 'Test Email'
msg['From'] = sender
msg['To'] = receiver
try:
with smtplib.SMTP('smtp.gmail.com', 587) as server:
server.starttls()
server.login(sender, 'votreMotDePasse')
server.sendmail(sender, receiver, msg.as_string())
print("Email envoyé avec succès")
except Exception as e:
print(f"Erreur : {e}")
🚨 Attention : Ne jamais laisser vos mots de passe dans le code. Utilisez des variables d’environnement pour plus de sécurité.
3. Sécurité
L'envoi d'emails en programmation nécessite de manipuler des informations sensibles comme les identifiants d'accès au serveur SMTP.
Comment sécuriser ses informations ?
3.1 Utilisation des variables d’environnement
Au lieu de stocker vos identifiants dans le code, stockez-les dans des fichiers d'environnement .env
à bien mettre dans le .gitignore
.
Exemple :
Dans Node.js :
javascript
require('dotenv').config();
const email = process.env.EMAIL;
const password = process.env.PASSWORD;
Dans votre fichier .env
:
bash
EMAIL=votreEmail@gmail.com
PASSWORD=votreMotDePasse
3.2 Utilisation de TLS/SSL
Pour protéger les données pendant leur transmission, il est crucial d'activer TLS ou SSL lorsque vous configurez votre serveur SMTP. Par exemple, Nodemailer et PHPMailer supportent ces protocoles nativement.
4. API d'envoi d'emails
En plus de l'envoi via SMTP, on peut utiliser des API spécialisées pour simplifier l'envoi de mails à grande échelle. Des services comme SendGrid, Mailgun, Postmark, ou EmailJS permettent d'avoir des API fiables pour envoyer des emails.
Exemple avec EmailJS (en JavaScript) :
EmailJS permet d'envoyer des emails directement depuis une application front-end, sans avoir besoin de serveur backend.
- Créez un compte sur EmailJS.
- Configurez votre service email (par exemple Gmail) et créez un template dans l'interface EmailJS.
- Obtenez votre User ID et votre Service ID.
Exemple de code :
html
<head>
<script type="text/javascript"
src="https://cdn.jsdelivr.net/npm/@emailjs/browser@4/dist/email.min.js">
</script>
<script type="text/javascript">
(function(){
emailjs.init({
publicKey: "oMqq7O7XOuIBpqy1P",
});
})();
</script>
<script src="js/contact.js"></script>
</head>
<body>
<form>
<div>
<label for="message">Message</label>
<textarea name="message" id="message" placeholder="Mon message" required></textarea>
</div>
<div>
<label for="nom_prenom">Nom, Prénom</label>
<input type="text" name="nom_prenom" id="nom_prenom" placeholder="Mon nom et prénom" required>
</div>
<div>
<label for="mail">Mail</label>
<input type="text" name="mail" id="mail" placeholder="Mon mail" required>
</div>
<button type="button" onclick="send_mail()">ENVOYER</button>
</form>
</body>
javascript
// Script pour envoyer l'email avec EmailJS
document.getElementById('emailForm').addEventListener('submit', function(event) {
event.preventDefault();
emailjs.init('YOUR_USER_ID'); // Remplacez par votre User ID
emailjs.sendForm('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', this)
.then(function() {
console.log('Email envoyé avec succès !');
}, function(error) {
console.log('Erreur dans l\'envoi de l\'email:', error);
});
});
function send_mail(){
let parametres = {
nom_prenom: document.getElementById("nom_prenom").value,
mail: document.getElementById("mail").value,
message: document.getElementById("message").value
};
emailjs.send('YOUR_SERVICE_ID', 'YOUR_TEMPLATE_ID', parametres).then(function() {
alert("Votre message a bien été envoyé !");
}).catch(function(error) {
console.error("Échec de l'envoi : ", error);
alert("Échec de l'envoi, veuillez réessayer.");
});
}
🚨 Remarque : L'avantage d'EmailJS est qu'il permet d'envoyer des emails directement depuis le navigateur, évitant la configuration d'un serveur backend.
5. Conclusion
Quand on veut envoyer des emails en programmation, l'important est de savoir sécuriser les informations du user. Ici, je ne parle pas des interactions avec le backend en cas d'une base de données avec plusieurs utilisateurs.