Université Paris 7 M2 II Protocole Internet TP3 Mail Attention aux fausses manoeuvres lors de ce TP vous pouvez endommager votre mail sur ouindose. 1 Protocole SMTP 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 à vos fichiers 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 à [email protected] 1 import java.util.*; import javax.mail.Address; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; // 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 { // emetteur du message (MAIL FROM:) Address emetteur = new InternetAddress("[email protected]", "Pere Noel"); // recepteur du message (RCPT TO:), Address receveur = new InternetAddress("[email protected]"); // positionnement de la propriete mail.host au serveur local Properties props = new Properties(); 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); 2 } catch (Exception ex) { ex.printStackTrace(); } } } Consultez les classes Message et MimeMessage et enrichissez le courrier que vous vous enverrez. 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 import import import javax.mail.*; javax.mail.internet.*; java.util.*; java.io.*; public class pop3Client { public static void main(String[] args) { Properties props = new Properties(); String host = "ouindose.informatique.univ-paris_diderot.fr"; //ligne 0 String username = "etudiant"; String password = "motcache"; String provider = "pop3"; try { // Connection au serveur POP3 //ligne 1 Session session = Session.getDefaultInstance(props, null); Store store = session.getStore(provider); //ligne 2 store.connect(host, username, password); 3 // Ouverture de la boite aux lettres Folder inbox = store.getFolder("INBOX"); if (inbox == null) { System.out.println("No INBOX"); System.exit(1); } inbox.open(Folder.READ_ONLY); // Lire les messages Message[] messages = inbox.getMessages(); for (int i = 0; i < messages.length; i++) { System.out.println("------------ Message " + (i+1) + " ------------"); messages[i].writeTo(System.out); } // Fermer la connexion en laissant les fichiers // sur le 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 getPasswordAuthentificator(). A titre indicatif, 4 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("etudiant")); ... //au lieu de la ligne 2 store.connect(host, null, null); Classe MailAuthentificator: import import import import javax.mail.*; javax.swing.*; java.awt.*; 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); } 5 class HideDialog implements ActionListener { public void actionPerformed(ActionEvent e) { passwordDialog.hide(); } } 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 seulement les entêtes de ses messages. 3 Servlet 3.1 Installation d’un serveur Apache Tomcat 1. Depuis le site http://tomcat.apache.org/ télécharger et installer la version de tomcat compatible avec la version de java. Soit $CATALINA_HOME le catalogue racine de votre installation. 2. Démarrer votre serveur en exécutant le script shell $CATALINA_HOME/bin/startup.sh (Pour l’arrêter il faudra exécuter: $CATALINA_HOME/bin/shutdown.sh). 3. En utilisant votre navigateur préféré, utiliser votre serveur par http://localhost:8080 (le port est modifiable par le descripteur de contexte $CATALINA_HOME/conf/server.xml). Exécuter les servlets données en exemple. 4. A l’aide de votre environnement de programmation préférée (eclipse ou netbeans) créer un fichier index.jsp. (Votre environnement de programmation gére automiquement le lancement de tomcat sur le port 8084 par défaut, il gère aussi le catalogue WEB-INF contenant un fichier web.xml (descripteur de 6 déploiement) décrivant les associations, un catalogue classes où se trouvent les classes et un catalogue lib où se trouvent les bibliothèques). 5. Ecrire un fichier moi.html décrivant votre Curriculum vitae, rendre ce fichier appelable depuis votre fichier index.jsp. 6. Créer une servlet NewS permettant d’afficher le protocole utilisé et le nombre de visiteurs de la servlet, rendre cette servlet appelable depuis votre fichier index.jsp. 7