Envoi d'email en Java : bibliothèque Jakarta Mail (JavaMail)
En Java, l'envoi d'emails est traditionnellement réalisé via une API puissante et flexible — JavaMail. Après le transfert de Java EE vers la Eclipse Foundation, la bibliothèque a été renommée Jakarta Mail (pour Jakarta EE 9+) et utilise désormais le package jakarta.mail. Dans ce guide, nous verrons comment configurer et utiliser Jakarta Mail (ou le JavaMail classique) pour envoyer des emails via un serveur SMTP.
Qu'est-ce que Jakarta Mail (JavaMail) ?
Jakarta Mail est un framework indépendant de la plateforme pour créer des clients de messagerie. Il fournit un ensemble d'abstractions pour travailler avec les protocoles SMTP, POP3 et IMAP. Pour l'envoi d'emails, le protocole qui nous intéresse est SMTP. La bibliothèque prend en charge :
- L'envoi de messages texte simples (
text/plain). - L'envoi d'emails HTML avec pièces jointes (
multipart/mixed). - Le chiffrement SSL/TLS (SMTPS).
- L'authentification sur le serveur de messagerie.
Installation et configuration
Pour utiliser Jakarta Mail, vous devez ajouter une dépendance à votre projet. Si vous utilisez Maven, ajoutez ceci dans pom.xml :
<dependency> <groupId>com.sun.mail</groupId> <artifactId>jakarta.mail</artifactId> <version>2.0.1</version></dependency>Pour le JavaMail classique (package javax.mail), utilisez :
<dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.2</version></dependency>Une implémentation est également nécessaire (généralement com.sun.mail:javax.mail:1.6.2).
Envoi basique d'un email texte
Voici un exemple minimal d'envoi d'email via le serveur SMTP de Gmail (ou tout autre). Commencez par créer un objet Properties contenant les paramètres SMTP :
import java.util.Properties;import jakarta.mail.*;import jakarta.mail.internet.InternetAddress;import jakarta.mail.internet.MimeMessage;
public class EmailSender { public static void main(String[] args) { // Paramètres du serveur SMTP (exemple : Gmail) Properties props = new Properties(); props.put("mail.smtp.host", "smtp.gmail.com"); props.put("mail.smtp.port", "587"); props.put("mail.smtp.auth", "true"); props.put("mail.smtp.starttls.enable", "true"); // TLS
// Authentification String username = "your-email@gmail.com"; String password = "your-app-password"; // Utilisez un mot de passe d'application !
// Création de la session Session session = Session.getInstance(props, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } });
try { // Création du message Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient@example.com")); message.setSubject("Bonjour depuis Java !"); message.setText("Ceci est un message de test envoyé avec Jakarta Mail.");
// Envoi Transport.send(message); System.out.println("Email envoyé avec succès !"); } catch (MessagingException e) { e.printStackTrace(); } }}Important : Pour Gmail, utilisez un mot de passe d'application, et non votre mot de passe principal. Pour d'autres serveurs (Yandex, Mail.ru), les paramètres de port et d'hôte peuvent différer.
Aussi dans la bibliothèque
Générateur de QR codes en JavaScript (Node.js) avec qrcode et qr-image
Générateur de QR codes en Kotlin : bibliothèque ZXing et conseils d'implémentation
Jsoup Java : guide complet avec exemples et tutoriel
Jetons JWT en JavaScript (Node.js) : guide complet