Vorheriger Artikelinteressium zu Javamail, dem vierten Artikel in Empfang von E -Mails, können wir den auf der Konsole gedruckten Inhalt nicht lesen. Tatsächlich ist es nicht einfach, uns eine komplexe E -Mail an uns selbst analysieren zu lassen. Das Format und die Spezifikationen in der E -Mail sind sehr kompliziert. Der von uns verwendete Browser ist jedoch ein integriertes Datenverarbeitungsmodul zur Analyse verschiedener Datentypen. Wir müssen nur klar angeben, welcher Datentyp der Datenstrom gehört, bevor der Datenstrom an den Browser übertragen wird. Danach werden alle Parsingvorgänge automatisch vom Browser abgeschlossen. Das folgende Bild kann die Schritte erläutern, um E -Mails gut zu analysieren
1. Rufen Sie die Get -From-, GETUBject- und andere Methoden des Nachrichtenobjekts an, um den Absender und das Thema der E -Mail zu erhalten, und rufen Sie die GetContentType -Methode an, um den Typ der E -Mail zu erhalten.
2. Verwenden Sie den Rückgabewert der Meldung.GetContType -Methode, um den E -Mail -Typ zu bestimmen, und rufen Sie die Meldung auf. Wenn der E -Mail -Typ "Text/Klartext" oder "Text/HTML" ist, bedeutet dies, dass der E -Mail -Inhalt nur Text ist. Rufen Sie zu diesem Zeitpunkt die GetContent -Methode des Nachrichtenobjekts auf, um den E -Mail -Inhalt abzurufen, und konvertieren Sie dann den Typ des zurückgegebenen Objekts in eine Zeichenfolge und geben Sie ihn in die Anzeigesoftware aus. Wenn der Nachrichtentyp "Multipart/*" ist, bedeutet dies, dass der Nachrichteninhalt ein zusammengesetzter Typ ist. Zu diesem Zeitpunkt muss das von der Nachricht verschärfte Objekt in mehrteilig in mehrfacher Zeit konvertiert werden.
3. Rufen Sie die GetCount -Methode des mehrteiligen Objekts auf, um festzustellen, wie viele BodyPart -Objekte im Mehrteil -Objekt eingekapselt sind, und nehmen Sie jedes BodyPart -Objekt im mehrteiligen Objekt eins nach eins durch eine für die Verarbeitung auf.
4. Wenn Sie jedes Bodypart -Objekt verarbeiten, rufen Sie zuerst die GetContentType -Methode des Bodypart -Objekts auf, um den MIME -Typ zu erhalten, und behandeln Sie dann die folgenden drei Situationen basierend auf dem MIME -Typ:
Wenn der MIME -Typ "text/*" ist, bedeutet dies, dass das Bodypart -Objekt in einfachen Textdaten gespeichert wird, wie in der obigen Abbildung gezeigt. Zu diesem Zeitpunkt ist die GetContent -Methode des ersten Bodypart -Objekts und konvertiert das zurückgegebene Objekt in eine Zeichenfolge und gibt es in die Anzeigesoftware für die Anzeige aus.
Wenn der MIME -Typ Binärdaten wie Bilder, Geräusche oder Anhänge darstellt, wie in der obigen Abbildung "Bild/GIF", sollte die GetDatahandler -Methode des Bodypart -Objekts aufgerufen werden, um das von den Daten eingekapselte DataHanLder -Objekt zu erhalten, und dann die GetInputStream -Methode des Datahandler -Objekts, die als Eingabe -Stream -Objekt bezeichnet wird, um das mit der Daten zugeordnete Daten zu erhalten. Der ursprüngliche Binärdateninhalt kann über dieses InputStream -Objekt erhalten werden.
Wenn der MIME -Typ "mehrteilig/gemischt" ist, bedeutet dies, dass das Bodypart -Objekt in der zusammengesetzten MIME -Nachricht gespeichert ist. Zu diesem Zeitpunkt sollte die GetContent -Methode des Bodypart -Objekts aufgerufen werden, um das Objekt zu erhalten, das die zusammengesetzte MIME -Botschaft zusammenfasst und sie in den mehrteiligen Typ umwandelt. Wiederholen Sie dann die 3. und 4. Schritte, um rekursive Aufrufe an das mehrteilige Objekt zu tätigen.
Schreiben wir ein Programm, das die Anhänge empfängt und analysiert
Pop3Help.java
Paket mail; import java.util.properties; import javax.mail.folder; import javax.mail prop.setProperty ("mail.store.protocol", "pop3"); prop.setProperty ("mail.pop3.host", Host); Sitzung mailSession = session.getDefaultInstance (prop, null); MailSession.setDebug (false); try {store store = MailSession.getStore ("pop3"); store.connect (Host, Benutzername, Passwort); Ordner order = store.getFolder ("Posteingang"); order.open (order.read_write); Rückgabeordner; } catch (Ausnahme e) {e.printstacktrace (); } return null; }}Diese Klasse wird verwendet, um sich an den POP3 -Server zu verbinden, sich anzumelden und das Ordnerobjekt zurückzugeben, das den E -Mail -Ordner darstellt
index.html
<html> <head> <title>login.html</title> </head> <body> <form action="login.jsp" method="post"> Host name: <input name="host" type="text"><br/> Username:<input name="username" type="text"><br/> Password:<input name="password"><br/> <input type="submit" value="submit"> <Eingabe type = "reset" value = "reset"> </form> </body> </html>
Anmeldeseite muss der Benutzer den Hostnamen, den Benutzernamen und das Kennwort des Mailservers ausfüllen
login.jsp
<%@ page import = "javax.mail.*, mail. String username = request.getParameter ("Benutzername"); String password = request.getParameter ("Passwort"); String von = ""; String Subjekt = ""; Ordner Ordner = pop3Help.getFolder (Host, Benutzername, Passwort); Session.SetAttribute ("Ordner", Ordner); Message [] messages = order.getMessages (); für (int i = 0; i <message.length; i ++) {try {from = message [i] .getfrom () [0] .ToString (); Betreff = Nachrichten [i] .GetSubject (); out.print (i + 1);%> Absenderadresse: <%= von%> E -Mail -Betreff: <%= Betreff%> <a href = "displaymsg.jsp? msgnum = <%= i + 1%>"> E -Mail anzeigen </a> <br/> <%} catch (Ausnahme E) {}%>%>%>%>%>%>%>%>%>%>%>%>%Holen Sie sich alle Nachrichten in den E -Mail -Ordner
displaymsg.jsp
<Frameset rows = "25%,*"> <Frame Src = "/maildemo/displayhead? msgnum = <%= request.getParameter (" msgnum ")%>" scrolling = "no"> <Frame Src = "/maildemo/displayContent?Informationen, die zum Anzeigen von E -Mails verwendet werden
Displayhead.java
Paketpost; import Java.io.ioException; import Java.io.printwriter; import Java.text.DateFormat; Import Javax.Mail.Bodypart; Import Javax.mail.Folder; javax.servlet.servletException; import javax.servlet.http.httpservlet; import Javax.servlet.http.httpServletRequest; Import Javax.Servlet.http.httpletReTReTRETRETRAGE JAVAX. Displayhead erweitert httpServlet (public void dodget (httpServletRequest request, httpServletResponse -Antwort), die servletException, ioException {response.setContentType ("text/html; charset = gb2312") ausgelöst wird; Printwriter out = response.getWriter (); HttpSession Session = Request.GetSession (); int msgnum = integer.parseInt (request.getParameter ("msgnum")); Ordner Ordner = (Ordner) Session.getAttribute ("Ordner"); try {message msg = order.getMessage (msgnum); String von = msg.getfrom () [0] .ToString (); String Subjekt = msg.getSubject (); String sendDate = dateFormat.getInstance (). Format (msg.getSentdate ()); out.println ("Mail Betreff:" + Betreff + "<br/>"); out.println ("Absender:" + von + "<br/>"); out.println ("Datum senden:" + senddate + "<br/> <br/>"); System.out.println ("contentType:" + msg.getContentType ()); // Wenn es sich bei der Nachricht um eine Kombination "Multipart/*" handelt, kann sie Anhänge usw. enthalten (msg.ismimetype ("multiPart/*") {Multipart MP = (MultiPart) msg.getContent (); für (int i = 0; i <mp.getCount (); i ++) {bodypart bp = mp.getBodypart (i); // Wenn das Bodypart -Objekt Anhänge enthält, sollte es analysiert werden, wenn (bp.getdisposition ()! = Null) {String Dateiname = bp.getFileName (); System.out.println ("Dateiname:" + Dateiname); if (fileName.StartsWith ("=?")) {// codieren den Dateinamen, um den RFC822 -Spezifikationsspezifikationsname zu entsprechen. } // Erstellen Sie einen Hyperlink, um den Anhang auszuschalten. out.print ("<a href = handleattach? msgnum =" + msgnum + "&& bodynum =" + i + "&& Dateiname =" + Dateiname + ">" + Dateiname + "</a> <br/>"); }}}} catch (Ausnahme e) {e.printstacktrace (); }}}Wird verwendet, um den Inhalt des E -Mail -Headers anzuzeigen
DisplayContent.java
Paketpost; import Java.io.ioException; import javax.mail.bodypart; import javax.mail.folder; import Javax.mail.message; import Javax.mail.multipart; Javax.Servlet.Servlet.Servlet.Servlet. javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;@SuppressWarnings("serial")public class DisplayContent extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse -Antwort) löst ServletException aus, ioException {ServLetOutputStream sos = response.getOutputStream (); HttpSession Session = Request.GetSession (); int msgnum = integer.parseInt (request.getParameter ("msgnum")); Ordner Ordner = (Ordner) Session.getAttribute ("Ordner"); try {message msg = order.getMessage (msgnum); // Wenn der Nachrichtentyp nicht gemischt ist, bedeutet dies, dass die Nachricht keine Anhänge enthält und der Nachrichteninhalt direkt ausgibt, wenn (! Msg.ismimetype ("multiPart/gemischt") {response.setContentType ("message/rfc822"); MSG.Writeto (SOS); } else {// geben das E -Mail -Körper im E -Mail -Multipart MP = (MultiPart) msg.getContent (); int bodynum = mp.getCount (); für (int i = 0; i <bodynum; i ++) {bodypart bp = mp.getBodypart (i); / * * Wenn der MIME -Nachrichtenheader nicht das Dispositionsfeld enthält und der MIME -Nachrichtentyp nicht gemischt ist, zeigt * an, dass die aktuell erhaltene MIME -Nachricht der E -Mail -Körper ist */if (! Bp.ismimetype ("multiPTIRT/MIXED") && bp.getDisposition () == NULL) {reaktion Bp.Writeto (SOS); }}}} catch (Ausnahme e) {e.printstacktrace (); }}}Wird verwendet, um das E -Mail -Körper anzuzeigen
Handleattact.java
Paketpost; import Java.io.ioException; import Java.io.inputStream; Import Javax.mail.bodypart; Import Javax.mail.Folder; import Javax.mail.message; import Javax.mail.mail. javax.servlet.http.httpServlet; import javax.servlet.http.httpsertRequest; import Javax.servlet.http.httpServletRespect; public void dodget (httpServletRequest Request, httpServletResponse -Antwort) löst ServletException aus, ioException {response.setContentType ("text/html"); HttpSession Session = Request.GetSession (); ServLetOutputStream out = Antwort.getOutputStream (); int msgnum = integer.parseInt (request.getParameter ("msgnum")); int bodynum = Integer.ParseInt (request.getParameter ("bodynum")); String Dateiname = Request.getParameter ("Dateiname"); Ordner Ordner = (Ordner) Session.getAttribute ("Ordner"); try {message msg = order.getMessage (msgnum); // Setzen Sie den Meldungs-Header-Typ auf Anhangstyp Antwort. Multipart Multi = (Multipart) msg.getContent (); Bodypart bodypart = multi.getBodypart (bodynum); InputStream ist = bodypart.getInputStream (); int c = 0; while ((c = is.read ())! = -1) {out.write (c); }} catch (Ausnahme e) {e.printstacktrace (); }}}Wird verwendet, um Anhänge zu handhaben
web.xml
<? 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" --1.5 "-List-NAME> Maildem- <Welcome-File> Index.html </Welcome-File> <Welcome-File> INDEX </Welcome-File-List> <Servlet> <Servlet-name> Displayhead </Servlet-name> <Servlet-Class> mail.displayhead </Servlet-Class> </Servlet> <Servlet-Mapping> <Servlet-name> Displayhead </Servlet-name> <url-patter>/display </url-patter> </servlet-maping <servlet-name> displayContent </servlet-name> <Servlet-Class> mail.displayContent </Servlet-Class> </Servlet> <Servlet-Mapping> <Servlet-Mapping> <Servlet-name> displayContent </servlet-name> <Url-patter>/displaycontent </url-pattent> </</</</</</</</</</</</</</</</</</</</</</</</Servlet-Mapping> </url-pattent <Servlet-name> Handleattach </Servlet-Name> <Servlet-Class> mail.handleattach </Servlet-Klasse> </Servlet> <Servlet-Mapping> <Servlet-Mapping> <Servlet-Name> Handleattach </Servlet-name> <URL-PATTERN>/Handleattach </url-pattern> </dienst-mapping> </url-patter>
Starten Sie zuerst den Tomcat -Server und geben Sie dann http: // localhost: 8080/maildemo/index.html im Browser ein
Geben Sie den Benutzernamen und das Kennwort ein (der Autorisierungscode muss hier ausgefüllt werden. Was ist der Autorisierungscode und wie wird er festgelegt?)
Listen Sie alle Nachrichten im E -Mail -Ordner auf
Klicken Sie auf, um den E -Mail -Link anzuzeigen
Klicken Sie nach dem Anhang auf den Dateinamen, um den entsprechenden Anhang herunterzuladen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.