Javamail: Programmation Orientée Objet

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 18

République du Cameroun Republic of Cameroon

Paix – Travail – Patrie Peace – Work – Fatherland


---------- ----------
Université de Yaoundé I University of Yaoundé I
---------- ----------
Ecole National Supérieur National Advanced School of
Polytechnique Yaoundé Engineering Polytechnic
---------- ----------
Département du Génie Department of Computer
Informatique Engineering

JAVAMAIL

Rédigé par :

• AZOA ETOUNDI SOPHIE ENGELBERTE


• ENYEGUE OTTOU JUNNIE LOVE DORIA
• KEGNE CHATUE MYRIAM ARMELLE
• NGANA NGUEFACK IGOR
• NGOUPEYOU HAROLD
• SOKENG CHRISTIAN

Année académique : 2021/2022

Supervisé par : Dr. BATCHAKUI et Programmation orientée


Dr. BILLONG IV
objet
JAVAMAIL

Table des matières


INTRODUCTION .......................................................................................................................... 2
I. DEFINITION DE L’OUTIL ET UTILISATION ................................................................ 3
II. HISTORIQUE DE JAVAMAIL ........................................................................................ 5
IV. DEMONSTRATION ......................................................................................................... 12
V. RECOMMANDATIONS .................................................................................................. 15
CONCLUSION ............................................................................................................................. 17

1|Page
JAVAMAIL

INTRODUCTION

Les technologies de l’information et la communication (TIC) sont omniprésentes


dans les activités quotidiennes des employés et leur utilisation devient quasi-
systématique pour gérer, traiter, communiquer et mémoriser l’information. Parmi
ces TIC, la messagerie électronique s’est rapidement développée dans les
organisations aux cours de ces dix dernières années, par sa facilité d’utilisation et
son utilité perçue. C’est ainsi que dans la plupart des applications logicielle,
l’envoi et la réception de messages électroniques sont devenus une part très
importante. Tout langage de programmation standard, tout du moins la
plupart, possède une API de communication par e-mail, et le langage Java ne
fait pas exception. Java fournit une API de messagerie Javamail que nous
allons présenter et étudier dans la suite via un exemple d’implémentation.

2|Page
JAVAMAIL

I. DEFINITION DE L’OUTIL ET UTILISATION

Le courrier électronique repose sur le concept de clients et de serveurs. Les clients


de mail (tel que Outlook, Messenger, Eudora, etc.) s’appuient sur un serveur de
messagerie pour obtenir et envoyer des e-mails. Ces échanges sont normalisés par
des protocoles particuliers (SMTP, POP3, etc.).

Les principaux protocoles de messagerie sont :

• SMTP (Simple Mail Transport Protocol), protocole défini par la


recommandation RFC 821, permet l’envoi d’e-mails vers un serveur.
• POP3 (Post Office Protocol), protocole défini par la recommandation RFC
1939, permet la réception d’e-mails. Protocole très populaire sur Internet, il
définit une boîte aux lettres unique pour chaque utilisateur.
• IMAP (Internet Message Acces Protocol), protocole défini par la
recommandation RFC 2060, permet la réception d’e-mails. Ce protocole est
plus complexe car il apporte des fonctionnalités supplémentaires : plusieurs
répertoires par utilisateur, partage de répertoires entre plusieurs utilisateurs,
maintien des messages sur le serveur, etc.
• MIME (Multipurpose Internet Mail Extensions) : il permet d’indiquer au
navigateur ce qui est envoyé par exemple

3|Page
JAVAMAIL

• NNTP (Network News Transport Protocol). Ce protocole est utilisé par les
forums de discussion (news).

L’API JavaMail permet de s’abstraire de tout système de mail et d’utiliser la plupart


des protocoles de communication de manière transparente. Ce n’est pas un serveur
d’e-mails, mais un outil pour interagir avec le serveur de messagerie. Les
applications développées avec JavaMail peuvent être ainsi comparables aux
différentes messageries que l’on rencontre telles que Outlook, Lotus, Eudora, etc.
Cette API propose donc des méthodes pour lire ou envoyer des e-mails, rechercher
un message, etc. Les classes et interfaces de cette API sont regroupées dans le
paquetage javax.mail. Dans notre application, nous utiliserons le cas simple d’un
envoi d’e-mail par SMTP. Les classes et interfaces de l’API Javamail sont regroupées
en quatre packages : javax.mail, javax.mail.event, javax.mail.internet,
javax.mail.search .

Java Mail est une extension du JDK et peut être utilisée pour diverses fins :

➢ Au moment de l’enregistrement de l’utilisateur : En effet, lorsque le client


s’enregistrera sur notre application, on pourra lui envoyer une notification via son
mail lui demandant de confirmer son inscription.
➢ Pour mot de passe oublié : en effet on pourra utiliser ainsi JavaMail afin de
réinitialiser le mot de passe par exemple d’un utilisateur.
➢ Envoi des notifications de mise à jour importante
➢ etc…

Pour cet exemple, nous n’utiliserons pas toute la panoplie des classes et interfaces
de l’API, mais juste les principales, c’est-à-dire : Session, Message, Transport et
InternetAddress.

4|Page
JAVAMAIL

JavaMail offre un ensemble de classe abstraite définissant des objets qui compose
un système de messagerie et a été conçu pour simplifier l’ajout de fonctionnalités
de messagerie électronique.

II. HISTORIQUE DE JAVAMAIL

Le langage de programmation Java nécessite une interface de programmation


d’application ou « API » pour gérer les messages électroniques. JavaMail utilise le
langage Java pour gérer email via IMAP, POP3 et SMTP. JavaMail est crée par Sun
Microsystems et publie pour la première fois en Décembre 1999 dans le cadre de
Java Enterprise Edition 1.2. La version 1.1.1 de JavaMail voit le jour en Février 2000
avec plusieurs corrections de bugs et de nouvelles fonctionnalités. Ainsi, plusieurs
mises à jour sont effectuées au fil des années.

Version API JavaMail 1.3


• Le 26 Juin 2002
Cette version contient un certain nombre d’améliorations pour améliorer la facilité
d’utilisation et les performances de l’API JavaMail. L’API JavaMail 1.3 fournit un
ensemble de classes abstraites qui modélisent un système de messagerie. L’API
fournit un cadre indépendant de plate-forme et indépendant du protocole pour
construire des applications de messagerie et de messagerie basées sur la technologie
Java.
Version API JavaMail 1.3.1
• Le 27 juin 2003
La version JavaMail API 1.3.1 contient des corrections de bogues ainsi qu’une prise
en charge de l’authentification DIGEST-MD5 dans le fournisseur SMTP.
Version API JavaMail 1.3.2
• Le 19 octobre 2004

5|Page
JAVAMAIL

La version JavaMail(TM) API 1.3.2 a permis d’intégrer les fonctionnalités


suivantes :
- Prise en charge SSL/TLS pour tous les protocoles
- Support STARTTLS pour les protocoles IMAP et SMTP
- Prise en charge sasl pour le protocole IMAP
-accès à des codes d’erreur SMTP détaillés
Version API JavaMail 1.3.3
• Le 30 août 2005
Elle prend en compte la prise en charge de fonctionnalités plus spécifiques au
protocole et des améliorations significatives pour l’encodage et le décodage de
base64.
Version API JavaMail 1.4
• Le 25 avril 2006
Cette version comprend des améliorations des performances d’évaluation MIME et
la prise en charge de l’évaluation et de la construction des notifications d’états de
livraison.
Version API JavaMail 1.4.1
• Le 22 octobre 2007
Il contient un support EXPÉRIMENTAL pour la commande IMAP IDLE. Le
moniteur.java programme de démonstration (inclus avec JavaMail) a été modifié
pour illustrer l’utilisation de cette méthode pour surveiller les nouveaux messages.
Version API JavaMail 1.4.2
• Le 2 mars 2009
Améliorations
- Meilleure utilisation d’InternetAddress.
- Réécriture significative du verrouillage IMAP pour éviter les blocages.
- Utilisation réduite de la mémoire pour les très grandes boîtes aux lettres IMAP.

6|Page
JAVAMAIL

- Notifications de livraison de messages parsing support.


- Prise en charge simplifiée de SSL.
Version API JavaMail 1.4.3
• Le 20 novembre 2009
Améliorations
- Un LogHandler qui enregistre les messages à l’aide d’e-mails, pour une utilisation
avec java.util.logging.
- Prise en charge de l’authentification NTLM, pour se connecter à Microsoft
Exchange.
- Support STLS pour POP3.
Version API JavaMail 1.4.4
• Le 21 janvier 2011
Améliorations
- Possibilité de mettre en cache des messages POP3 sur disque.
- Dans la mémoire, le cache de messages POP3 utilise désormais des références
douces.
- Le support d’authentification NTLM est désormais intégré, il n’a plus besoin de
jcifs.jar.
- Prise en charge de l’authentification SASL pour SMTP.
- Nouvelles classes de démonstration montrant comment gérer les anciens messages
Outlook non-MIME.
Version API JavaMail 1.4.5
• 23 mars 2012
Améliorations
- Support SOCKS5 (nécessite JDK 1.5 ou plus nouveau)
- les informations d’authentification (p. ex., mots de passe) ne sont plus incluses dans
la sortie de débogage par défaut

7|Page
JAVAMAIL

JavaMail 1.6.2 Version finale


• 29 août 2018
Améliorations
- Supporter les fournisseurs de protocoles de chargement à l’aide de ServiceLoader
- http proxy support doit prendre en charge l’authentification vers le serveur proxy
Notez que le projet JavaMail va passer à la Fondation Eclipse dans le cadre du projet
Eclipse Enterprise for Java au cours des prochaines semaines. Les futures versions
seront effectuées dans le cadre du projet Eclipse pour JavaMail.

III. COMMENT INTEGRER JAVAMAIL DANS UN PROJET

Téléchargement et installation

¨Pour télécharger le package javamail, il faut aller sur le site web


https://javaee.github.io/javamail/ dont la page principale s’affiche comme suit :

8|Page
JAVAMAIL

Cliquer ensuite sur le lien Download situé dans la partie droite de la page web qui va s’afficher,
lien qui va nous rediriger vers le repositoire github correspondant :

9|Page
JAVAMAIL

Cliquer ensuite sur javax.mail.jar qui va directement lancer le téléchargement. Dans notre fichier
java sur Netbeans, dans lequel le code est écrit, faire un clic droit sur Libraries et choisir « Add
JAR/Folder » puis sélectionner ce que l’on vient de télécharger et d’installer et le tour est joué.
L’on peut donc commencer à utiliser javamail et ses classes et interfaces.

Les différentes classes et interfaces de Javamail

❖ La classe Session : À la manière de JMS(Java Message Service)JavaMail


possède une classe javax.mail.Session qui établit la connexion avec le serveur
de messagerie. C’est elle qui encapsule les données liées à la connexion
(options de configuration, login, password, nom du serveur) et à partir de
laquelle les actions sont réalisées.
Création d’une Session javamail :
Properties properties = new Properties();
properties.put("mail.smtp.host", "smtp.free.fr");
properties.put("mail.smtp.auth", "true");
Session session = Session.getInstance(properties, null);

❖ La classe Message : La classe javax.mail.Message est une classe abstraite qui


encapsule le contenu du courrier électronique. Un message est composé d’un
en-tête qui contient l’adresse de l’auteur et du destinataire, le sujet, etc. et d’un
corps qui contient les données à envoyer. JavaMail fournit en standard une
classe fille nommée javax.mail.internet.MimeMessage pour les messages
possédant un type MIME. La classe Message possède de nombreuses
méthodes pour initialiser les données du message. Nous utiliserons les
principales qui permettent de positionner l’adresse de l’émetteur(1), du
destinataire(2) , le sujet(3) et le corps du message (4) ainsi que la date d’envoi
(5).10
Création d’un Message :
Message msg = new MimeMessage(session) ;
msg.setFrom(new InternetAddress("[email protected]"));(1)
msg.setRecipients(Message.RecipientType.TO, (2)
new InternetAddress("[email protected]"));
msg.setSubject("Confirmation de commande");(3)
msg.setText("La commande n°1002 a été créée");(4)
msg.setSentDate(new Date()); (5)
10 | P a g e
JAVAMAIL

❖ La classe InternetAddress : La classe javax.mail.internet.InternetAddress est


nécessaire pour chaque émetteur et destinataire d’e-mail. Elle hérite de la
classe javax.mail.Address et représente une adresse e-mail au format
[email protected]. Pour créer une adresse e-mail, il suffit de passer
une chaîne de caractères au constructeur.
Utilisation des adresses :
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("[email protected]"));
msg.setRecipients(Message.RecipientType.TO,
new InternetAddress("[email protected]"));

❖ La classe Transport : La classe javax.mail.Transport se charge d’envoyer le


message avec le protocole adéquat. Dans notre cas, pour SMTP, il faut obtenir
un objet Transport dédié à ce protocole en utilisant la méthode
getTransport("smtp") d’un objet Session(1) . Il faut ensuite établir la
connexion en utilisant la méthode connect() (2) en passant le nom du serveur
de messagerie, le nom de l’utilisateur et son mot de passe. Pour envoyer le
message que l’on aura créé antérieurement, il faut utiliser la méthode
sendMessage() (3) en lui passant la liste des destinataires getAllRecipients().
Enfin, il faut fermer la connexion à l’aide de la méthode close() (4).
Envoi d’un e-mail :
Transport transport = session.getTransport("smtp");(1)
transport.connect("smtp.free.fr", "user", "password");(2)
transport.sendMessage(msg, msg.getAllRecipients());(3)
transport.close(); (4)

❖ Les propriétés d’environnement : JavaMail utilise des propriétés


d'environnement pour recevoir certains paramètres de configuration. Ils sont
stockés dans un objet de type Properties.

❖ La classe Authenticator : Authenticator est une classe abstraite qui propose


des méthodes de base pour permettre d'authentifier un utilisateur. Pour
l'utiliser, il faut créer une classe fille qui se chargera de collecter les
informations. Par défaut, la méthode getPasswordAuthentication() de la classe
Authentication renvoie null. Cette méthode renvoie un objet

11 | P a g e
JAVAMAIL

PasswordAuthentication à partir d'une source de données (boîte de dialogue


pour saisie, base de données, ...).Une instance d'une classe fille de la classe
Authenticator peut être fournie à la session. L'appel à Authenticator sera fait
selon les besoins par la session.

L’envoi d’un e-mail par SMTP

Pour envoyer un e-mail via SMTP, il faut suivre les principales étapes suivantes :

• Positionner les variables d'environnement nécessaires


• Instancier un objet Session
• Instancier un objet Message
• Mettre à jour les attributs utiles du message
• Appeler la méthode send() de la classe Transport

IV. DEMONSTRATION

Afin de démontrer comment envoyer et recevoir des mails grâce à Javamail, comme
expliqué plus haut, nous avons écrit un code qui le montre :

12 | P a g e
JAVAMAIL

13 | P a g e
JAVAMAIL

14 | P a g e
JAVAMAIL

Et après exécution de ce code qui a marché, le mail a bien été envoyé de


« [email protected] » vers « [email protected] » comme le

montre la figure ci-après :

V. RECOMMANDATIONS

Voici quelques recommandations concernant l’usage de l’API Javamail :


• Activer sa connexion internet avant l’envoi ou la réception de mails
• Diminuer le niveau de sécurité du compte de l’expéditeur (possible sur gmail,
pour les autres serveurs de mails, nous ne savons point si cela est possible) :
cliquer sur « Gérer votre compte google » en ayant au préalable cliqué sur
l’icône de votre compte Google, ensuite aller dans le menu « Sécurité », puis
aller à « Accès aux applications moins sécurisées », ensuite cliquer sur
15 | P a g e
JAVAMAIL

« Désactiver » et activer l’option qui se présentera. Les images ci_après


montre comment cela se présentera :

• Connaître les numéros de ports de chaque serveur de mail fonction du


protocole utilisé (c’est généralement 587 ou 465)

16 | P a g e
JAVAMAIL

CONCLUSION

Ainsi, nous pouvons retenir que l'API Java Mail présente une opportunité pour les
développeurs d'intégrer des fonctionnalités de messagerie électronique dans leurs
applications avec tous les avantages que cette API peut offrir : facilité de
développement, prise en charge de plusieurs protocoles et intégration flexible des
avancées futures. Nous avons également vu qu'envoyer et recevoir des mails avec
Java n'est pas très compliqué, il suffit juste de bien suivre le protocole établi plus
haut.

17 | P a g e

Vous aimerez peut-être aussi