Vous êtes sur la page 1sur 7

http://www.eni-training.com/client_net/pdfexport.aspx?

exporttype=1

Administration de JavaMail
Le serveur Oracle GlassFish inclut l’API JavaMail en standard, permettant aux applications Java EE d’envoyer
des e-mails via Internet ou de lire les courriers des serveurs IMAP et POP.

L’API JavaMail n’est pas un serveur mails mais une bibliothèque permettant de manipuler le courrier
électronique pour envoyer une liste de nouveautés ou un mail de confirmation de commande par exemple.

Cette API est totalement indépendante du serveur mails utilisé et propose plusieurs méthodes pour lire ou
écrire des courriers électroniques. Ainsi, lorsque nous aurons besoin d’envoyer des e-mails dans une
application Web, nous utiliserons l’API JavaMail.

L’API JavaMail doit être téléchargée à cette adresse : http://java.sun.com/products/javamail/ et


installée à partir de librairies au format JAR dans les applications Java. Avec le serveur GlassFish cette
librairie est déjà installée par défaut.

1. Configuration de l’API JavaMail


Le service JavaMail est accessible avec le service de nommage JNDI. Une session JavaMail définit l’hôte mail,
le protocole de transport et de stockage et l’e-mail utilisateur par défaut. Avec une session JNDI JavaMail,
une seule configuration est nécessaire et partagée pour tous les composants qui en ont besoin.

La configuration JavaMail repose alors sur les éléments suivants :

Le nom JNDI définissant le nom de la session mail. Le préfixe mail/ est utilisé pour les ressources JavaMail.

Le nom MailHost définissant le nom d’hôte du serveur mail.

Le paramètre Default User permettant de définir le nom d’utilisateur par défaut pour la connexion au
serveur.

Le paramètre Default Return Address permettant de définir l’adresse e-mail par défaut de l’utilisateur
expéditeur (from : nomutilisateur@hôte.domaine).

Le paramètre Description permettant d’ajouter une description au composant.

Le paramètre Session définissant si la session mail est activée ou pas.

La configuration de l’API JavaMail commence par la création d’une ressource JavaMail avec l’utilitaire
asadmin ou l’interface Web d’administration. La ligne de commande suivante permet de créer une session
JavaMail pour l’hôte smtp.gdawj.com :

$ asadmin --port 25 --host localhost create-javamail-resource --mailhost


smtp.free.fr
--mailuser info --fromaddress info\@gdawj\.com mail/MaSessionJavaMail

L’interface d’administration Web permet également de créer une session JavaMail comme c’est le cas avec la
figure suivante :

1 sur 7 10/04/2017 13:00


http://www.eni-training.com/client_net/pdfexport.aspx?exporttype=1

Création d’une session JavaMail GlassFish

La commande asadmin list-javamail-resources permet d’afficher les ressources JavaMail disponibles :

$ asadmin list-javamail-resources

La commande asadmin delete-javamail-resources permet de supprimer une session JavaMail à partir de


son nom :

$ asadmin delete-javamail-resources mail/MaSessionJavaMail

2. Utilisation de l’API JavaMail avec Java EE


Nous allons utiliser notre session JavaMail GlassFish créée précédemment à l’aide d’une Servlet simple
utilisant le context de l’application et JNDI pour accéder à la ressource. Le serveur GlassFish inclut l’API
JavaMail et ses services pour permettre aux applications d’envoyer des e-mails à travers Internet et de lire
des e-mails avec les protocoles IMAP et POP3. Les applications peuvent accéder aux références de sessions
JavaMail à travers JNDI et l’injection de dépendance.

Le nouveau projet Java EE nommé projetjavaeejavamail contient une Servlet 3.0 nommée
MaServlet.java de type Java EE 6 permettant d’envoyer un message simple à l’aide de la session JavaMail
précédemment créée. La seconde Servlet 3.0 nommée MaServlet2.java permet d’envoyer un message au
format HTML avec une image associée et utilise une injection de dépendance avec l’annotation @Resource
pour accéder à la session JavaMail. Ces exemples sont accessibles à cette adresse : http://localhost:8080
/projetjavaeejavamail.

2 sur 7 10/04/2017 13:00


http://www.eni-training.com/client_net/pdfexport.aspx?exporttype=1

Arboresence projetjavaeejavamail

Code : com.gdawj.servlets.MaServlet.java
...
@WebServlet(name="MaServlet", urlPatterns="/JavaMail1/*")
public class MaServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest req, HttpServletResponse


res)throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out=res.getWriter();
out.println("<html><body>");
out.println("<h1>JavaMail 1 - MaServlet</h1>");
out.println("</body></html>");
out.flush();
out.close();

try
{
// initialisation du contexte
InitialContext ic=new InitialContext();
Session session = (Session)ic.lookup("mail/MaSessionJavaMail");
System.out.println(session.toString());

Message msg = new MimeMessage(session);


// sujet de l’e-mail
msg.setSubject("Essai de JavaMail avec GlassFish");
msg.setSentDate(new Date());
msg.setFrom();
// un e-mail valide ou un tableau d’e-mails
msg.setRecipients(Message.RecipientType.TO,

InternetAddress.parse("jerome.lafosse@laposte.net", false));
// texte de l’e-mail
msg.setText("Essai, JavaMail avec GlassFish !\n");
// envoyer l’e-mail
Transport.send(msg);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

Cette seconde Servlet permet d’envoyer un message au format HTML avec une image en pièce jointe et
utilise l’injection de ressources (@Resource). Ce message est composé de texte au format UTF-8.

Code : com.gdawj.servlets.MaServlet2.java

3 sur 7 10/04/2017 13:00


http://www.eni-training.com/client_net/pdfexport.aspx?exporttype=1

...
@WebServlet(name="MaServlet2", urlPatterns="/JavaMail2/*")
public class MaServlet2 extends HttpServlet
{
private static final long serialVersionUID = 1L;

// injection de la ressource JNDI


@Resource(type = Session.class, name = "mail/MaSessionJavaMail",
mappedName ="mail/MaSessionJavaMail")
private Session session;

private String from;


private String cc;
private String bcc;

public void doGet(HttpServletRequest req, HttpServletResponse


res)throws ServletException, IOException
{
res.setContentType("text/html");
PrintWriter out=res.getWriter();
out.println("<html><body>");
out.println("<h1>JavaMail 2 - MaServlet</h1>");
out.println("</body></html>");
out.flush();
out.close();

try
{
Message msg = new MimeMessage(session);
msg.setSubject("Essai de JavaMail avec GlassFish");

if (from != null)
{
msg.setFrom(new InternetAddress(from));
}
else
{
msg.setFrom();
}

if (cc != null)
{
msg.setRecipients(Message.RecipientType.CC,InternetAddress.parse(cc,
false));
}

if (bcc != null)
{
msg.setRecipients(Message.RecipientType.BCC,InternetAddress.parse(bcc,
false));
}

4 sur 7 10/04/2017 13:00


http://www.eni-training.com/client_net/pdfexport.aspx?exporttype=1

// destinataire

msg.setRecipients(Message.RecipientType.TO,InternetAddress.parse("jerome.
lafosse@laposte.net", false));

// message HTML
StringBuffer sb=new StringBuffer();
sb.append("<HTML>\n");
sb.append("<HEAD>\n");
sb.append("<meta http-equiv=\"Content-Type\"
content=\"text/html; charset=utf-8\">\n");
sb.append("<TITLE>\n");
sb.append("Sujet\n");
sb.append("</TITLE>\n");
sb.append("</HEAD>\n");
sb.append("<BODY>\n");
sb.append("<H1>Sujet du mail</H1>" + "\n");
sb.append("<img
src=\"http://localhost:8080/projetjavaee/image.png\"/>\n");
sb.append("‫ﺱ درد ش‬ ‫\دونِ ا‬n");
sb.append("</BODY>\n");
sb.append("</HTML>\n");
// contenu UTF-8
msg.setContent(sb.toString(),"text/html; charset=UTF-8");
// format HTML
msg.setHeader("X-Mailer", "sendhtml");
msg.setSentDate(new Date());

// envoyer le message
Transport.send(msg);
}
catch (Exception e)
{
e.printStackTrace();
}
}

5 sur 7 10/04/2017 13:00


http://www.eni-training.com/client_net/pdfexport.aspx?exporttype=1

E-mail au format HTML et avec encodage UTF-8

Ce dernier exemple, basé sur la première Servlet, permet d’envoyer un fichier en pièce jointe depuis le
serveur. Nous pouvons remarquer que même si la pièce jointe est lourde, la réponse JavaMail est
instantanée et permet au programme de continuer. L’envoi du courrier sera alors réalisé en arrière-plan.

Code : com.gdawj.servlets.MaServlet.java
...
@WebServlet(name="MaServlet", urlPatterns="/JavaMail1/*")
public class MaServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;

public void doGet(HttpServletRequest req, HttpServletResponse


res)throws ServletException, IOException
{
...
// envoyer l’e-mail avec une piece jointe
File file=new File("C:\\Users\\LAFOSSE\\document.pdf");
if (file!=null)
{
MimeBodyPart mbp1=new MimeBodyPart();
mbp1.setText("Essai, JavaMail avec GlassFish !\n");
MimeBodyPart mbp2=new MimeBodyPart();
mbp2.attachFile(file);
MimeMultipart mp=new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
msg.setContent(mp);

msg.setHeader("X-Mailer", "msgsend");
msg.setSentDate(new Date());
}
else
{
// texte de l’e-mail

6 sur 7 10/04/2017 13:00


http://www.eni-training.com/client_net/pdfexport.aspx?exporttype=1

msg.setText("Essai, JavaMail avec GlassFish !\n");


}

// envoyer l’e-mail
Transport.send(msg);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}

7 sur 7 10/04/2017 13:00

Vous aimerez peut-être aussi