MON 1.2 : Apprendre à envoyer des mails en Backend

Tags :
  • MON
  • 2024-2025
  • temps 1
  • email
  • smtp
  • vert
Auteurs :
  • 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
  2. Exemples de code
  3. Sécurité
  4. API
  5. Conclusion

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.

  1. Créez un compte sur EmailJS.
  2. Configurez votre service email (par exemple Gmail) et créez un template dans l'interface EmailJS.
  3. 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.