Article précédent Article Introduction à Javamail, le quatrième article dans la réception des e-mails, nous ne pouvons pas lire le contenu imprimé sur la console. En fait, il n'est pas facile de nous laisser analyser un e-mail complexe par nous-mêmes. Le format et les spécifications de l'e-mail sont très compliqués. Cependant, le navigateur que nous utilisons est le module de traitement des données intégré pour analyser divers types de données. Nous avons seulement besoin de spécifier clairement à quel type de données auquel le flux de données appartient avant de transmettre le flux de données au navigateur. Après cela, toutes les opérations d'analyse seront achevées automatiquement par le navigateur. L'image suivante peut bien expliquer les étapes pour bien analyser les e-mails
1. Appelez le GetFrom, GetSubject et d'autres méthodes de l'objet de message pour obtenir l'expéditeur et le sujet de l'e-mail, et appelez la méthode GetContentType pour obtenir le type de l'e-mail;
2. Utilisez la valeur de retour de la méthode Message.getContentType pour déterminer le type de messagerie et appelez la méthode Message.getContent pour obtenir le contenu de l'e-mail. Si le type de messagerie est "texte / simple" ou "texte / html", cela signifie que le contenu de l'e-mail est un texte brut. À l'heure actuelle, appelez la méthode GetContent de l'objet Message pour obtenir le contenu de l'e-mail, puis convertissez le type de l'objet renvoyé en une chaîne et le publiez en logiciel d'affichage. Si le type de message est "Multipart / *", cela signifie que le contenu du message est un type de composé. À l'heure actuelle, l'objet composé par la méthode Message.getContent doit être converti en multiprès.
3. Appelez la méthode GetCount de l'objet multipART pour détecter le nombre d'objets de carrosserie corporels encapsulés dans l'objet multiparte et éliminez chaque objet BodyPart dans l'objet multipart un par un via une boucle pour le traitement.
4. Lors du traitement de chaque objet de carter, appelez d'abord la méthode GetContentType de l'objet bodypart pour obtenir son type MIME, puis gérez les trois situations suivantes en fonction du type MIME:
Lorsque le type MIME est "Text / *", cela signifie que l'objet BodyPart est stocké dans des données de texte brut, comme indiqué dans la figure ci-dessus. À l'heure actuelle, la méthode GetContent du premier objet BodyPart et convertissent l'objet renvoyé en une chaîne et le publient au logiciel d'affichage pour l'affichage.
Lorsque le type MIME représente des données binaires telles que des images, des sons ou des pièces jointes, comme dans "l'image / GIF" dans la figure ci-dessus, la méthode GetDatahandler de l'objet BodyPart doit être appelée pour obtenir l'objet Datahanlder encapsulé par l'objet Data, puis la méthode GetInputStream de l'objet DataHandler est appelée pour obtenir l'objet EntreStream associé aux données. Le contenu de données binaires d'origine peut être obtenu via cet objet InputStream.
Lorsque le type MIME est "MultipART / mixtes", cela signifie que l'objet de caractéristique corporelle est stocké dans le message MIME composé. À l'heure actuelle, la méthode GetContent de l'objet BodyPart doit être appelée pour obtenir l'objet qui résume le message MIME composé et le convertit en type multipar. Répétez ensuite les 3e et 4e étapes pour passer des appels récursifs vers l'objet multipar.
Écrivons un programme qui reçoit et analyse les pièces jointes
Pop3help.java
Package Mail; import java.util.properties; import javax.mail.folder; import javax.mail.session; import javax.mail.store; public class pop3help {public static dossier getfolder (string host, string userName, string mot de passe) {Properties prop = new Properties (); Prop.SetProperty ("Mail.store.protoCol", "POP3"); Prop.SetProperty ("mail.pop3.host", hôte); Session MailSession = Session.getDefaultInstance (Prop, null); MailSession.setDebug (false); essayez {Store Store = MailSession.getStore ("POP3"); store.connect (hôte, nom d'utilisateur, mot de passe); Dossier dossier = store.getFolder ("Inbox"); dossier.open (dossier.read_write); dossier de retour; } catch (exception e) {e.printStackTrace (); } return null; }}Cette classe est utilisée pour se connecter et se connecter au serveur POP3 et renvoyer l'objet de dossier représentant le dossier de messagerie
index.html
<html> <éad- head> <ititle> login.html </ title> </ head> <body> <form action = "login.jsp" Method = "Post"> Nom de l'hôte: <entrée name = "host" type = "Text"> <br/> Nom d'utilisateur: <entrée name = "username" type = "text"> <br/> Passway: <put name = "mot de passe"> <brout <input type = "reset" value = "reset"> </ form> </ body> </html>
Page de connexion, l'utilisateur doit remplir le nom d'hôte, le nom d'utilisateur et le mot de passe du serveur de messagerie
login.jsp
<% @ page import = "javax.mail. *, mail. *" contentType = "text / html; charset = gb2312"%> <% string host = request.getParameter ("host"); String username = request.getParameter ("nom d'utilisateur"); String mot de passe = request.getParameter ("mot de passe"); Chaîne de = ""; String sujet = ""; Dossier de dossier = pop3help.getfolder (hôte, nom d'utilisateur, mot de passe); session.setAttribute ("dossier", dossier); Message [] messages = dossier.getMessages (); for (int i = 0; i <messages.length; i ++) {try {from = messages [i] .getFrom () [0] .toString (); sujet = messages [i] .getSubject (); Out.print (i + 1);%> Adresse de l'expéditeur: <% = From%> Objet e-mail: <% = sujet%> <a href = "displaymsg.jsp? msgnum = <% = i + 1%>"> Voir le courriel </a> <br/> <%} catch (exception e) {}}%>Obtenez tous les messages dans le dossier Mail
displaymsg.jsp
<FrameSet Rows = "25%, *"> <frame src = "/ Maildemo / Displayhead? msGnum = <% = request.getParameter (" msgnum ")%>" Scrolling = "no"> <frame src = "/ Maildemo / DisplayContent?Informations utilisées pour afficher les e-mails
Displayhead.java
Package Mail; Importer java.io.ioException; import java.io.printwriter; import java.text.dateformat; import javax.mail.bodypart; import javax.mail.folder; import javax.mail.message. javax.servlet.servletException; import javax.servlet.http.httpservlet; importer javax.servlet.http.httpservletRequest; import javax.servlet.http.httpsserv. class Displayhead étend httpServlet {public void doGet (httpsservletRequest request, httpservletResponse réponse) lève servletException, ioException {réponse.setContentType ("text / html; charset = gb2312"); Printwriter out = réponse.getWriter (); HttpSession session = request.getSession (); int msgnum = Integer.ParseInt (request.getParameter ("msGnum")); Dossier dossier = (dossier) session.getAttribute ("dossier"); essayez {message msg = dossier.getMessage (msGnum); String de = msg.getFrom () [0] .toString (); String sujet = msg.getSubject (); String SendDate = DateFormat.getInstance (). Format (msg.getSentDate ()); out.println ("Sujet du courrier:" + sujet + "<br/>"); out.println ("Sender:" + from + "<br/>"); out.println ("Send Date:" + sendDate + "<br/> <br/>"); System.out.println ("ContentType:" + msg.getContentType ()); // Si le message est une combinaison "Multipart / *", il peut contenir des pièces jointes, etc. (msg.isMiMetype ("multipart / *")) {multipart mp = (multipart) msg.getContent (); for (int i = 0; i <mp.getCount (); i ++) {bodyPart bp = mp.getBodyPart (i); // Si l'objet BodyPart contient des pièces jointes, elle doit être analysée if (bp.getDisposition ()! = Null) {String filename = bp.getFileName (); System.out.println ("FileName:" + FileName); if (filename.startswith ("=?")) {// Encode le nom de fichier pour se conformer à la spécification RFC822 filename = mimeutility.decodeText (filename); } // générer un hyperlien pour ouvrir la pièce jointe Out.print ("attacher:"); out.print ("<a href = handleattach? msgnum =" + msgnum + "&& bodynum =" + i + "&& filename =" + filename + ">" + filename + "</a> <br/>"); }}}} catch (exception e) {e.printStackTrace (); }}}Utilisé pour afficher le contenu de l'en-tête de messagerie
DisplayContent.java
Package Mail; Importer java.io.ioException; import javax.mail.bodypart; import javax.mail.folder; import javax.mail.message; import javax.mail.multupart; import javax.servlet.servlexception; import javax.servlet.servletStream; import javax.sservlet.http. javax.servlet.http.httpservletRequest; Importer javax.servlet.http.httpservrassement; import javax.servlet.http.httpSession; @SuppressWarnings ("SERIAL") Classe publique DisplayContend étend Httpservlet {public Void Doget (HttpServe HttpServletResponse Response) lève Servlexception, ioException {servletOutputStream sos = réponse.getOutputStream (); HttpSession session = request.getSession (); int msgnum = Integer.ParseInt (request.getParameter ("msGnum")); Dossier dossier = (dossier) session.getAttribute ("dossier"); essayez {message msg = dossier.getMessage (msGnum); // Lorsque le type de message n'est pas mitigé, cela signifie que le message ne contient pas de pièces jointes et que le contenu du message est directement sorti si (! Msg.isMiMetype ("multipart / mixtes")) {réponse.setContentType ("message / rfc822"); msg.writeTo (SOS); } else {// trouver et sortir le corps du courrier électronique dans le multipart par e-mail mp = (multipart) msg.getContent (); int bodynum = mp.getCount (); for (int i = 0; i <bodynum; i ++) {bodyPart bp = mp.getBodyPart (i); / * * Lorsque l'en-tête de message MIME ne contient pas le champ de disposition et que le type de message MIME n'est pas mixé, * indique que le message MIME actuellement obtenu est le corps de messagerie * / if (! Bp.isMiMetype ("Multipart / Mixed") && bp.getDisposition () == null) {réponse.setContType ("Message / Rfc822"); bp.writeTo (SOS); }}}} catch (exception e) {e.printStackTrace (); }}}Utilisé pour afficher le corps de messagerie
Handleattact.java
Package Mail; Importer java.io.ioException; import java.io.inputStream; import javax.mail.bodyPart; import javax.mail.folder; import javax.mail.mesage; import javax.mail.multipart; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservrage; @suppresswarning {public void doGet (HttpServLetRequest Request, HttpServletResponse Response) lève Servlexception, ioException {réponse.setContentType ("text / html"); HttpSession session = request.getSession (); ServletOutputStream out = Response.getOutputStream (); int msgnum = Integer.ParseInt (request.getParameter ("msGnum")); int bodynum = Integer.ParseInt (request.getParameter ("bodynum")); String filename = request.getParameter ("FileName"); Dossier dossier = (dossier) session.getAttribute ("dossier"); essayez {message msg = dossier.getMessage (msGnum); // Définissez le type d'en-tête de message sur Type de pièce jointe Response.SetHeader ("Content-Disposition", "Pixe; FileLame =" + FileName); Multipart Multi = (multipart) msg.getContent (); BodyPart BodyPart = Multi.getBodyPart (BodyNum); InputStream est = bodyPart.getInputStream (); int c = 0; while ((c = is.read ())! = -1) {out.write (c); }} catch (exception e) {e.printStackTrace (); }}}Utilisé pour gérer les accessoires
web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee" xmlns: web = "http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" XSI: ScheMalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id = "webapp_id" version = "2.5"> <display-name> MailDemo </ Display-name> <Leloy-File> index.html </venke-file> <endem-file> index.htm </ bienvenue-file> <ven welcome-file> index.jsp </ bienvenue-file> <ven welcome-file> index.jsp </ bienvenue-File> <Deended-File> </venke-file-list> <Serplet> <Serplet-name> displayhead </ servlet-name> <servlet-class> mail.displayhead </vrlet-class> </servlet> <servlet-mapping> <servlet-name> affichagehead </vrlett-name> <url-pattern> / displayhead </url-pattern> </vrlett-mapping> <url-pattern> / displayhead </url-Pattern> </ serplet> <url-pattern> / affichage <VerTlet-Name> DisplayContent </ Servlet-Name> <Servlet-Class> Mail.DisplayContent </ Servlet-Class> </ Servlet> <Serplet-Mapping> <Serplet-Mapping> <Serplet-Name> DisplayContent </vrlet-name> <URL-Pattern> / DisplayContent </url-Pattern> </Serplet-Mapt> <Serplet-Name> handleattach </ serplet-name> <servlet-class> mail.handleattach </ serplet-class> </vrlet> <servlet-mapping> <servlet-mapping> <servlet-name> handleattach </ servlet-name> <url-platern> / web-app>
Démarrez d'abord le serveur Tomcat, puis entrez http: // localhost: 8080 / maildemo / index.html dans le navigateur
Entrez le nom d'utilisateur et le mot de passe (le code d'autorisation doit être rempli ici. Quel est le code d'autorisation et comment est-il défini?)
Liste tous les messages dans le dossier de messagerie
Cliquez pour afficher le lien électronique
Cliquez sur le nom du fichier après la pièce jointe pour télécharger la pièce jointe correspondante.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.