JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
THÈME :
Java Mail avec Java Enterprise Edition (JEE)
Adapté pour Java 8 • NetBeans 8 • GlassFish 4
Architecture, Configuration et Implémentation
⚠️ Note de compatibilité : Ce document utilise exclusivement les packages [Link].* (JavaMail 1.5), la
dépendance Maven [Link] 1.5.6, et la configuration GlassFish 4, compatibles avec Java 8 et NetBeans 8.
1. Introduction
Dans le développement d’applications d’entreprise avec Java Enterprise Edition (JEE), la
communication par e-mail est un besoin fondamental. Qu’il s’agisse d’envoyer des confirmations de
commande, des alertes système, des notifications d’inscription ou des rapports automatisés, l’envoi
de courriers électroniques est une fonctionnalité clé des systèmes d’information modernes.
La plateforme Java EE 7 intègre nativement une API standard dédiée à cet usage, composée de
trois éléments principaux :
• JavaMail API 1.5 ([Link].*) : API standard pour l’envoi et la réception d’e-mails via
SMTP, IMAP et POP3.
• JavaBeans Activation Framework (JAF) : Gestion des types MIME pour les pièces jointes
et le contenu HTML.
• JavaMail Resource (JNDI) : Configuration centralisée dans GlassFish 4, injectée via
@Resource.
Ce document présente l’historique, l’architecture, le fonctionnement technique détaillé et des
exemples pratiques d’implémentation de JavaMail dans une application Java EE 7 déployée sur
GlassFish 4 depuis NetBeans 8.
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
2. Historique de JavaMail
2.1 Origine de JavaMail
• Création : JavaMail a été introduit par Sun Microsystems en 1997 avec le JDK 1.1.
• Contexte : L’objectif était de fournir une API indépendante des protocoles e-mail pour unifier
la communication depuis les applications Java, quelle que soit la messagerie cible.
• Intégration Java EE : Officiellement intégré dans J2EE 1.3 (2001), puis standardisé jusqu’à
JavaMail 1.5 inclus dans Java EE 7.
2.2 Versions utilisées dans ce document
Dans l’environnement Java 8 / NetBeans 8 / GlassFish 4, voici les versions actives :
Composant Version Package / Artefact Maven
JavaMail API 1.5.x [Link] : [Link] : 1.5.6
Java EE 7 [Link]-api : 7.0
GlassFish 4.1.x Serveur d’application intégré NB8
NetBeans 8.x IDE avec support Java EE natif
Java 8 (1.8) JDK 8 requis
2.3 Pourquoi JavaMail dans Java EE 7 ?
Java EE 7 gère des applications multi-utilisateurs, transactionnelles et distribuées. L’envoi d’e-mail
doit donc être :
• Fiable : intégré aux transactions JTA pour garantir la cohérence.
• Centralisé : configurable via JNDI dans GlassFish sans modifier le code.
• Scalable : injectable via CDI (@Inject) dans les EJBs et Servlets.
• Sécurisé : supporte TLS/SSL pour le chiffrement des communications SMTP.
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
3. Rôle de JavaMail dans l’Architecture Java EE 7
3.1 Architecture multicouche
Dans une application Java EE 7 standard déployée sur GlassFish 4, JavaMail s’intègre à la couche
métier (Business Layer) pour déclencher des envois d’e-mails suite à des événements métier.
Couche Rôle avec JavaMail
Présentation
Déclenche une action utilisateur → appel du service mail
(JSF/Servlet)
Métier (EJB Stateless) Injection Session JavaMail via @Resource JNDI de GlassFish
Persistance (JPA /
Notifie après transaction (ex : commande validée → e-mail)
EclipseLink)
Infrastructure Serveur SMTP configuré dans GlassFish 4 (Admin Console)
3.2 Cas d’usages typiques
• Confirmation d’inscription ou de commande client.
• Réinitialisation de mot de passe par token e-mail.
• Alertes et notifications système automatisées.
• Envoi de rapports PDF en pièce jointe.
• Notifications de workflow et d’approbation métier.
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
4. Description Technique Détaillée
4.1 Protocoles supportés par JavaMail
Protocole Port standard Usage
SMTP 25 / 587 / 465 Envoi d’e-mails (Simple Mail Transfer Protocol)
IMAP 143 / 993 Lecture avec synchronisation serveur
POP3 110 / 995 Téléchargement d’e-mails depuis le serveur
4.2 Composants clés de l’API
• Session : Représente la connexion à un serveur mail. Configurée via JNDI ou
manuellement.
• MimeMessage : Représente un e-mail complet (sujet, corps, destinataires, en-têtes).
• Transport : Gère l’envoi du message via le protocole SMTP.
• Store / Folder : Permettent la lecture d’e-mails via IMAP ou POP3.
• MimeMultipart : Gère les e-mails multiparties (HTML + pièce jointe).
4.3 Configuration dans GlassFish 4 (Admin Console)
Dans GlassFish 4, la ressource JavaMail se configure via l’Administration Console
([Link] ou par commande asadmin. Chemin dans la console : Resources →
JavaMail Sessions → New.
Paramètres à renseigner :
Paramètre GlassFish Valeur exemple
JNDI Name mail/monSession
Mail Host [Link]
Default User utilisateur@[Link]
Default Sender Address utilisateur@[Link]
Transport Protocol smtp
Debug false (true uniquement en dev)
Commande asadmin équivalente :
asadmin create-javamail-resource \
--mailhost [Link] \
--mailuser utilisateur@[Link] \
--fromaddress utilisateur@[Link] \
--transprotocol smtp \
--property [Link]=587:[Link]=true:[Link]=true \
mail/monSession
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
4.4 Dépendances Maven ([Link]) pour Java 8
Dans un projet Maven Java EE 7 sous NetBeans 8, utiliser les dépendances suivantes. Le scope
provided indique que GlassFish 4 fournit déjà l’API en production :
<!-- API Java EE 7 (fournie par GlassFish 4) -->
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
<scope>provided</scope>
</dependency>
<!-- JavaMail 1.5 : package [Link].* -->
<dependency>
<groupId>[Link]</groupId>
<artifactId>[Link]</artifactId>
<version>1.5.6</version>
<scope>provided</scope>
</dependency>
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
4.5 Imports Java corrects pour Java 8 ([Link].*)
Tous les imports utilisent le package [Link].* et non [Link].* (celui-ci est réservé à Jakarta
EE / Java 11+) :
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
4.6 Injection et envoi dans un EJB Stateless
La Session configurée dans GlassFish est injectée directement dans un EJB Stateless. Le nom
JNDI correspond à celui saisi dans l’Administration Console :
import [Link];
import [Link];
import [Link].*;
import [Link].*;
@Stateless
public class MailService {
// JNDI name défini dans GlassFish Admin Console
@Resource(name = "mail/monSession")
private Session mailSession;
public void envoyerEmail(String destinataire,
String sujet, String corps) {
try {
Message message = new MimeMessage(mailSession);
[Link](new InternetAddress("app@[Link]"));
[Link]([Link],
new InternetAddress(destinataire));
[Link](sujet);
[Link](corps);
[Link](message);
} catch (MessagingException e) {
throw new RuntimeException("Echec envoi e-mail", e);
}
}
}
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
4.7 Envoi d’un e-mail HTML avec pièce jointe
Pour envoyer un e-mail enrichi (contenu HTML + fichier joint), on utilise MimeMultipart avec deux
parties distinctes :
import [Link].*;
import [Link].*;
import [Link];
public void envoyerEmailComplet(String to, String subject,
String html, File attachment) {
try {
MimeMessage message = new MimeMessage(mailSession);
[Link](new InternetAddress("app@[Link]"));
[Link]([Link],
new InternetAddress(to));
[Link](subject, "UTF-8");
// Partie HTML
MimeBodyPart htmlPart = new MimeBodyPart();
[Link](html, "text/html; charset=UTF-8");
// Pièce jointe
MimeBodyPart filePart = new MimeBodyPart();
[Link](attachment);
// Assemblage
MimeMultipart multipart = new MimeMultipart();
[Link](htmlPart);
[Link](filePart);
[Link](multipart);
[Link](message);
} catch (Exception e) {
throw new RuntimeException("Erreur envoi e-mail", e);
}
}
4.8 Envoi asynchrone via @Asynchronous (EJB)
Pour ne pas bloquer le thread principal lors de l’envoi (particulièrement utile pour les longues
opérations réseau), on utilise @Asynchronous :
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
@Stateless
public class AsyncMailService {
@Resource(name = "mail/monSession")
private Session mailSession;
@Asynchronous
public Future<Void> envoyerAsync(String to,
String sujet, String body) {
try {
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
Message msg = new MimeMessage(mailSession);
[Link]([Link],
new InternetAddress(to));
[Link](sujet);
[Link](body);
[Link](msg);
} catch (MessagingException e) {
throw new EJBException(e);
}
return new AsyncResult<Void>(null);
}
}
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
5. Intégration Avancée avec Java EE 7
5.1 Pattern Observer CDI pour l’envoi d’e-mails
L’approche recommandée en Java EE 7 est d’utiliser les événements CDI pour découpler
totalement la logique métier de l’envoi d’e-mails :
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
// Producteur d'événement
@Stateless
public class CommandeService {
@Inject
private Event<Commande> commandeEvent;
public void creerCommande(Commande c) {
// ... logique métier ...
[Link](c); // déclenche l'observer
}
}
// Observer (récepteur de l'événement)
@ApplicationScoped
public class CommandeMailObserver {
@Inject
private MailService mailService;
public void onCommande(@Observes Commande commande) {
[Link](
[Link](),
"Confirmation #" + [Link](),
"Votre commande a été enregistrée avec succès."
);
}
}
5.2 Comparaison des approches d’intégration
Approche Complexité Découplage Recommandée pour
Appel direct EJB Faible Non Petites applications
@Asynchronous Moyenne Partiel Envois non bloquants
CDI Events
Moyenne Total Architecture propre
(@Observes)
MDB + JMS Élevée Total Haute disponibilité
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
6. Bonnes Pratiques et Sécurité
6.1 Configuration sécurisée avec TLS/SSL
Si vous préférez configurer la Session manuellement dans le code (sans JNDI), voici la
configuration TLS correcte pour Java 8 avec [Link] :
import [Link].*;
import [Link];
Properties props = new Properties();
[Link]("[Link]", "true");
[Link]("[Link]", "true");
[Link]("[Link]", "[Link]");
[Link]("[Link]", "587");
Session session = [Link](props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(
"user@[Link]", "motdepasse");
}
});
6.2 Règles à respecter
• Credentials : Ne jamais stocker en dur dans le code. Privilégier JNDI (GlassFish).
• Validation : Toujours valider les adresses avec [Link]() avant l’envoi.
• Performance : Utiliser @Asynchronous ou une queue JMS/MDB pour les envois en
volume.
• Résilience : Gérer les exceptions MessagingException et prévoir un mécanisme de retry.
• Débogage : Activer [Link](true) uniquement en environnement de
développement.
• Limites SMTP : Respecter les quotas des fournisseurs (ex : Gmail : 500 e-mails/jour).
• Gmail OAuth : Pour Gmail en production, préférer OAuth 2.0 aux identifiants bruts.
6.3 Tableau récapitulatif des différences Java 8 vs Jakarta EE
Java 8 / NetBeans 8 /
Élément Jakarta EE (Java 11+)
GlassFish 4
Package API [Link].* [Link].*
Artefact Maven [Link] : [Link] : 1.5.6 [Link]-api : 2.1.0
provided (GlassFish 4
Scope Maven provided (WildFly/Payara)
fournit)
@Resource(name="mail/
Injection JNDI @Resource(lookup="...")
xxx")
Serveur application GlassFish 4 (intégré NB8) WildFly 27+ / Payara 6+
GlassFish Admin Console /
Config JNDI [Link] WildFly
asadmin
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4
JavaMail avec Java EE 7 — Java 8 / NetBeans 8 / GlassFish 4
7. Conclusion
JavaMail 1.5 ([Link]) est une composante essentielle de Java EE 7 pour toute application
nécessitant une communication par e-mail. Son intégration native via JNDI dans GlassFish 4, sa
compatibilité avec les EJBs, CDI et JPA en font un outil puissant, flexible et fiable dans
l’environnement Java 8 / NetBeans 8.
Les points clés à retenir :
• Utiliser le package [Link].* (et non [Link].*) avec Java 8.
• La dépendance Maven correcte est [Link] : [Link] : 1.5.6 avec le scope provided.
• La Session JavaMail se configure dans GlassFish 4 via l’Admin Console ou asadmin.
• L’injection se fait avec @Resource(name = "mail/monSession") dans un EJB Stateless.
• Les patterns CDI Events et @Asynchronous garantissent un code propre et découplé.
• La sécurité (TLS/SSL) et la bonne gestion des exceptions sont indispensables en
production.
Que ce soit pour des confirmations de commande, des alertes d’erreur ou des rapports
automatisés, JavaMail constitue le pont fiable entre votre application Java EE 7 et les serveurs de
messagerie de l’entreprise.
JavaMail API 1.5 — [Link] — Java EE 7 — GlassFish 4