TP2. Mail et servlet. Quel port utilise smtp? A quoi servent les commandes HELO, MAIL FROM:, RCPT TO:, DATA?

Documents pareils
TP3. Mail. Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose.

Web Tier : déploiement de servlets

Interfaces graphiques avec l API Swing

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Aspects techniques : guide d interfaçage SSO

Documentation CAS à destination des éditeurs

Développement Logiciel

Programmer en JAVA. par Tama

Groupe Eyrolles, 2005, ISBN :

Le Modèle de Sécurité dans JAVA

Architecture Orientée Service, JSON et API REST

Création d un service web avec NetBeans 5.5 et SJAS 9

Dis papa, c est quoi un bus logiciel réparti?

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction au langage Java

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Corrigé des exercices sur les références

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Tutoriel d installation de Hibernate avec Eclipse

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

API04 Contribution. Apache Hadoop: Présentation et application dans le domaine des Data Warehouses. Introduction. Architecture

Programmation Réseau. Sécurité Java. UFR Informatique jeudi 4 avril 13

Cahier des Charges du Projet Domotique. Choquet Mathieu Masson Jérôme Groupe 6. Domotique. p.1

Projet de programmation (IK3) : TP n 1 Correction

Desktop Intégration. Rémi Forax

Programmation Par Objets

Les architectures 3-tiers Partie I : les applications WEB

Principe de la messagerie électronique

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Architectures client/serveur

Package Java.util Classe générique

1. Installation d'un serveur d'application JBoss:

L3 informatique TP n o 2 : Les applications réseau

OpenPaaS Le réseau social d'entreprise

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Synchro et Threads Java TM

Flux de données Lecture/Ecriture Fichiers

Couche application. La couche application est la plus élevée du modèle de référence.

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Communication inter-processus (IPC) : tubes & sockets. exemples en C et en Java. F. Butelle

Fichiers d'archives java - *.jar

TP Protocoles SMTP et POP3 avec Pratiquer l algorithmique

Java Licence professionnelle CISII,

JavaServer Pages (JSP)

RMI le langage Java XII-1 JMF

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction à HTTP. Chapitre HTTP 0.9

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

TP Programmation Java / JDBC / Oracle

Cours 1: Java et les objets

Cours 9 : Servlet, JSP, corba

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Le langage JAVA G. Baulieu Institut de Physique Nucléaire de Lyon Septembre 2009

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Programmation Internet en Java

FTP & SMTP. Deux applications fondamentales pour le réseau Internet.

Une introduction à Java

PROGRAMMATION PAR OBJETS

Le développement d applications Web

Remote Method Invocation (RMI)

Auto-évaluation Programmation en Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Développement Web. Les protocoles

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Création d une application JEE

SOAP Concepts Application à Glassfish

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Calcul Parallèle. Cours 5 - JAVA RMI

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Traitement des données de formulaires. Accès aux BD avec JDBC Servlets - M. Baron - Page

Gestion distribuée (par sockets) de banque en Java

FTP & SMTP. File Transfert Protocol. Deux applications fondamentales pour le réseau Internet. Un protocole d échange de fichier «au dessus» de TCP :

Réseaux. 1 Généralités. E. Jeandel

La base de données XML exist. A. Belaïd

Le développement d applications Web. François Charoy Pascal Molli Pascal Urso

Tp 1 correction. Structures de données (IF2)

Programmation Réseau SSH et TLS (aka SSL)

Un ordonnanceur stupide

Programmation Internet Cours 4

Remote Method Invocation Les classes implémentant Serializable

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Une introduction à la technologie EJB (2/3)

Notes de cours Practical BigData

Sécurité Java 2. Première approche. Installation des exemples. Exemple d'une applet

Projet Java EE Approfondi

Java Naming and Directory Interface

Protocoles Applicatifs

Alfstore workflow framework Spécification technique

Le MSMQ. Version 1.0. Pierre-Franck Chauvet

Configuration des logiciels de messagerie

Java - la plateforme

Transcription:

Université Paris 7 M2 II Protocole Internet 1 Protocole SMTP TP2 Mail et servlet 1. Le protocole SMTP est définit dans la RFC 821 (mise à jour dans la RFC 2821). Le format des messages est spécifié dans la RFC 822. Consultez ces RFC et répondez aux questions suivantes: Quel port utilise smtp? A quoi servent les commandes HELO, MAIL FROM:, RCPT TO:, DATA? 2. Par la commande telnet, envoyez un mail à un utilisateur de ouindose. 3. Y a t il une vérification (et si oui de quel ordre), du domaine transmis par HELO? de l identité de l émetteur du message? 2 Programmation Java Java propose une JavaMail API pour manipuler le courrier. 1. Ajouter les Java Archive File activation.jar et mail.jar (à charger depuis java.sun.com/products/javamail) 2. En utilisant les classes de javax.mail.*, le programme suivant permet d envoyer un mail à l utilisateur cd de liafa.jussieu.fr en utilisant le serveur smtp ouindose.informatique.univ-paris-diderot.fr. import java.util.*; import javax.mail.*; // les 2 classes suivantes sont utilisées pour // le courrier electronique Internet import javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; public class EnvoiMailSimple { public static void main(string[] args) { try { 1

// emetteur du message (MAIL FROM:) le mail a pour emetteur Pere Noel Address emetteur = new InternetAddress("pppppp@liafa.jussieu.fr", "Pere Noel"); // recepteur du message (RCPT TO:) Address receveur = new InternetAddress("cd@liafa.jussieu.fr"); Properties props = new Properties(); // choix du serveur smtp props.put("mail.host", "ouindose.informatique.univ-paris-diderot.fr"); // demarrage d une session de courrier Session mailconnection = Session.getInstance(props, null); // Construction du message à envoyer par Internet Message msg = new MimeMessage(mailConnection); msg.setfrom(emetteur); msg.setrecipient(message.recipienttype.to, receveur); msg.setsubject("bientot Noel"); msg.setcontent(" M as tu envoye ta commande?\n j attends", "text/plain"); //Emission du message Transport.send(msg); catch (Exception ex) { ex.printstacktrace(); Consultez les classes Message et MimeMessage et enrichissez votre courrier. 3. Le programme suivant permet de lire le courrier de etudiant avec le mot de passe motcache sur ouindose.informatique.univ-paris-diderot.fr où se trouve un serveur pop3. import java.util.date; import java.util.properties; import javax.mail.*; public class pop3client { public static void main(string[] args) { Properties props = new Properties(); String host = "ouindose.informatique.univ-paris-diderot.fr"; // ligne 0 String password="motcache"; 2

String username = "etudiant"; String provider = "pop3"; try { // ligne 1 Session session = Session.getDefaultInstance(props,null); Store store = session.getstore(provider); // ligne 2 store.connect(host, username, password); System.out.println("connection reussie"); Folder inbox = store.getfolder("inbox"); if (inbox == null) { System.out.println("No INBOX"); System.exit(1); inbox.open(folder.read_only); // récuperer les messages du serveur Message[] messages = inbox.getmessages(); for (int i = 0; i < messages.length; i++) { System.out.println("------------ Message " + (i+1) + " ------------"); messages[i].writeto(system.out); System.out.println(); // Ferme la connexion // sans enlever les messages du serveur inbox.close(false); store.close(); catch (Exception ex) { ex.printstacktrace(); Modifier ce programme pour n afficher que le sujet, l émetteur et la date d envoi. 4. Authentification Il n est pas souhaitable que le mot de passe se trouve dans ce programme. L API Javamail propose une classe abstraite Authentificator (javax.mail. Authentificator). Quand une session dispose d un tel objet, quand on réalise la connexion, on appelle la méthode getpasswordauthentificator(). 3

A titre indicatif, on propose une sous classe de Authentificator: MailAuthentificator qui s utiliserait ainsi partir du programme précédent: // on enlève la ligne 0 // au lieu de la ligne 1 Session session = Session.getDefaultInstance(props, new MailAuthenticator(username));... //au lieu de la ligne 2 store.connect(host, null, null); Classe MailAuthentificator: import javax.mail.*; import javax.swing.*; import java.awt.*; import java.awt.event.*; public class MailAuthenticator extends Authenticator { private JDialog passworddialog = new JDialog(new JFrame(), true); private JLabel passwordlabel = new JLabel("Password: "); private String username; private JPasswordField passwordfield = new JPasswordField(20); private JButton okbutton = new JButton("OK"); public MailAuthenticator(String u) { username = new String(u); Container pane = passworddialog.getcontentpane(); pane.setlayout(new GridLayout(2, 1)); JPanel p = new JPanel(); p.add(passwordlabel); p.add(passwordfield); p.add(okbutton); pane.add(p); passworddialog.pack(); ActionListener al = new HideDialog(); okbutton.addactionlistener(al); passwordfield.addactionlistener(al); class HideDialog implements ActionListener { public void actionperformed(actionevent e) { passworddialog.hide(); 4

public PasswordAuthentication getpasswordauthentication() { passworddialog.show(); String password = new String(passwordField.getPassword()); passwordfield.settext(""); return new PasswordAuthentication(username, password); Réécrire le programme de l exercice précédent de telle sorte qu il affiche une boite de dialogue permettant de saisir l identification et le mot de passe de l utilisateur qui désire connaître les entête de ces messages. 3 Servlet 1. On considère une application web. Le fichier index.jsp contient 2 boutons et un champ texte où on saisie le nom de l utilisateur l activation d un de ces boutons appelle une servlet travail.java, mappée sur travail.html, qui affiche un message "on va envoyer du courrier pour nom" ou "on va lire le courrier de nom " index.jsp <%@page contenttype="text/html" pageencoding="utf-8"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> <title>jsp Page</title> </head> <body> <h1> Bonjour, </h1> <form action= travail.html method= get > <input type= submit name= bouton value= Envoie > <input type= submit name= bouton value= Lire > </body> </html> Classe travail.java import java.io.*; import java.net.*; import javax.servlet.*; import javax.servlet.http.*; 5

public class travail extends HttpServlet { protected void processrequest(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); try { out.println("<html>"); out.println("<head>"); out.println("<title>servlet NewServlet2</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>servlet pour le courrier " + request.getcontextpath () + "</h1>"); out.println("</body>"); out.println("</html>"); String bouton =request.getparameter("bouton"); String nom=request.getparameter("nom"); if (bouton.equals("envoie"))out.println("on va envoyer du courrier pour "+nom); if (bouton.equals("lire"))out.println("on va lire le courrier de "+nom ); finally { out.close(); protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); protected void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { processrequest(request, response); public String getservletinfo() { return "Un petit webmail "; 6

Le mapping dans web.xml <servlet> <servlet-name>travail</servlet-name> <servlet-class>travail</servlet-class> </servlet> <servlet-mapping> <servlet-name>travail</servlet-name> <url-pattern>/travail.html</url-pattern> </servlet-mapping> 2. 3. Au lieu d afficher le message "on va lire le courrier pour nom ", on va lire le courrier. La servlet travail.java passe le contrôle à la servlet lect.java mappée sur lect.html: if (bouton.equals("lire")){ RequestDispatcher disp ; disp=request.getrequestdispatcher("/lect.html"); disp.forward(request,response); Cette servlet affiche un champ pour saisir le password de l utilisateur et passe le contrôle à une autre servlet pour afficher le courrier. Utiliser les cookies pour ne pas redemander le mot de passe de l utilisateur à chaque fois (mais prévoyez qu il puisse changer). Ecrire le code de ces servlets. 4. Au lieu d afficher le message "on va envoyer du courrier", on va envoyer le courrier. La servlet travail.java passe le contrôle à la servlet envoi.java mappée sur envoi.html. Elle demande le destinataire, le sujet et le texte du message à envoyer. et passe le contrôle à une autre servlet qui fait le traitement. Ecrire le code de ces servlets. 7