Предыдущая статья Introduction в Javamail, четвертую статью в получении электронных писем, мы не можем прочитать контент, напечатанный на консоли. На самом деле, нелегко позволить нам проанализировать сложное электронное письмо сами. Формат и спецификации в электронном письме очень сложны. Тем не менее, браузер, который мы используем, представляет собой встроенный модуль обработки данных для анализа различных типов данных. Нам нужно только четко указать, какой тип данных принадлежит потоку данных перед передачей потока данных в браузер. После этого все операции анализа будут автоматически завершены браузером. Следующая картина может объяснить шаги, чтобы хорошо разобрать электронные письма
1. Позвоните в GetFrom, GetSubject и другие методы объекта сообщения, чтобы получить отправителя и предмет электронной почты, и вызовите метод GetContentType, чтобы получить тип электронной почты;
2. Используйте возвращаемое значение метода Message.getContentType, чтобы определить тип электронной почты, и вызовите метод сообщения. Если тип электронной почты «текст/простой» или «текст/HTML», это означает, что содержимое электронной почты является простым текстом. В настоящее время вызовите метод GetContent объекта сообщения, чтобы получить контент электронной почты, а затем преобразовать тип возвращаемого объекта в строку и выведите его в программное обеспечение Display. Если тип сообщения «Multipart/*», это означает, что содержимое сообщения является составным типом. В настоящее время объект, усугубляемый методом message.getContent, должен быть преобразован в Multipart.
3. Вызовите метод GetCount многочисленного объекта, чтобы обнаружить, сколько объектов BodyPart инкапсулировано в объект Multipart, и выберите каждый объект BodyPart в многочисленном объекте один по одному через цикл для обработки.
4. При обработке каждого объекта BodyPart сначала вызовите метод GetContentType объекта BodyPart, чтобы получить тип падения MIME, а затем обрабатывать следующие три ситуации на основе типа панели:
Когда тип MIME является «Text/*», это означает, что объект BodyPart хранится в простой текстовой данных, как показано на приведенном выше рисунке. В настоящее время метод GetContent первого объекта BodyPart и преобразование возвращаемого объекта в строку и выводит его в программное обеспечение Display для отображения.
Когда тип MIME представляет двоичные данные, такие как изображения, звуки или вложения, как и в «изображении/GIF» на рисунке выше, следует вызвать метод GetDataHandler объекта BodyPart для получения объекта DataHanler, инкапсулированного данными, а затем метод GetInputStream объекта DataHandler вызывается для получения объекта ввода, связанного с данными. Оригинальное содержание двоичных данных может быть получено через этот объект InputStream.
Когда тип MIME является «Multipart/Mixed», это означает, что объект BodyPart хранится в сообщении составного MIME. В настоящее время метод GetContent объекта BodyPart должен быть вызван для получения объекта, который инкапсулирует сообщение MIME MIME, и преобразует его в тип Multy. Затем повторите 3 -й и 4 -й шаги, чтобы сделать рекурсивные вызовы в Multyart Abode.
Давайте напишем программу, которая получает и анализирует вложения
Pop3Help.java
Пакет почта; импорт java.util.properties; import javax.mail.folder; import javax.mail.session; import javax.mail.store; открытый класс pop3help {public Static Polder GetFolder (String Host, String username, String Password) {Properties prop = new Properties ();); prop.setproperty ("mail.store.protocol", "pop3"); prop.setproperty ("mail.pop3.host", host); Session Mailsession = session.getDefaultInstance (prop, null); mailsession.setdebug (false); try {Store Store = mailSession.getStore ("pop3"); Store.connect (хост, имя пользователя, пароль); Папка папка = store.getFolder ("inbox"); folder.open (folder.read_write); вернуть папку; } catch (Exception e) {e.printstackTrace (); } return null; }}Этот класс используется для подключения и входа на сервер POP3 и возврата объекта папки, представляющего папку почты.
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"> <input type = "сбросить" value = "сбросить"> </form> </body> </html>
Страница входа в систему, пользователь должен заполнить имя хоста, имя пользователя и пароль почтового сервера
Login.jsp
<%@ page import = "javax.mail.*, mail.*" contentType = "text/html; charset = gb2312"%> <%string host = request.getParameter ("host"); String username = request.getParameter ("имя пользователя"); String password = request.getParameter ("пароль"); Строка от = ""; Строка субъекта = ""; Папка папка = pop3help.getFolder (хост, имя пользователя, пароль); session.setattribute ("Папка", папка); Message [] messages = folder.getMessage (); for (int i = 0; i <Сообщения. toot = сообщения [i] .getSubject (); out.print (i + 1);%> Адрес отправителя: <%= от%> Субъект электронной почты: <%= субъект%> <a href = "displaymsg.jsp? msgnum = <%= i + 1%>"> Просмотреть электронную почту </a> <br/> <%} Catch (Exception e) {}}%>Получите все сообщения в папке почты
Displaymsg.jsp
<Frameset Rows = "25%,*"> <frame src = "/mailDemo/displayhead? msgnum = <%= request.getParameter (" msgnum ")%>" scolling = "no"> <кадр src = "/mailDemo/displayContent?Информация, используемая для отображения электронных писем
Displayhead.java
Пакет почта; импорт java.io.ioexception; импорт java.io.printwriter; import java.text.dateformat; импорт javax.mail.bodypart; импорт javax.mail.folder; import javax.mail.message; import javax.multipart; import javax.mail.message; import.mail.multipart; import javax.mail.mestiality; javax.servlet.servletexception; import javax.servlet.http.httpservlet; импорт javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; импорт javax.servlet.http.htpsession; Class DisplayHead Extens Httpservlet {public void Doget (httpservlectrequest -запрос, httpservletresponse response) throws servletexception, ioexception {response.setContentType ("text/html; charset = gb2312"); Printwriter Out = response.getWriter (); Httpsession session = request.getsession (); int msgnum = integer.parseint (request.getParameter ("msgnum")); Папка папка = (папка) session.getAttribute ("folder"); try {message msg = folder.getMessage (msgnum); String from = msg.getFrom () [0] .toString (); Строка субъекта = msg.getSubject (); String SendDate = dateFormat.getInstance (). Format (msg.getSentDate ()); out.println ("Почта тема:" + субъект + "<br/>"); out.println ("Sender:" + from + "<br/>"); out.println ("Отправить дату:" + senddate + "<br/> <br/>"); System.out.println ("ContentType:" + msg.getContentType ()); // Если сообщение представляет собой комбинацию «Multipart/*», оно может содержать вложения и т. Д. (msg.ismimeType ("Multipart/*")) {Multipart MP = (Multipart) msg.getContent (); for (int i = 0; i <mp.getCount (); i ++) {bodypart bp = mp.getbodypart (i); // Если объект BodyPart содержит вложения, его следует анализировать, если (bp.getDisposition ()! = Null) {String filename = bp.getFilename (); System.out.println ("filename:" + filename); if (fileName.startSwith ("=?")) {// кодировать имя файла в соответствии с спецификационным файлом RFC822 = mimeUtility.decodeText (filename); } // Сгенерировать гиперссылку, чтобы открыть приложение Out.print ("ATCTION:"); out.print ("<a href = handleattach? msgnum =" + msgnum + "&& bodynum =" + i + "&& filename =" + filename + ">" + filename + "</a> <br/>"); }}}} catch (Exception e) {e.printstacktrace (); }}}Используется для отображения контента заголовка электронной почты
DisplayContent.java
Пакет почта; импорт java.io.ioexception; import javax.mail.bodypart; import javax.mail.folder; import javax.mail.message; импорт javax.mail.multipart; импорт javax.servlet.servletexception; import javax.servlet.servlet javax.servlet.http.httpservlectrequest; import javax.servlet.http.httpservletresponse; import javax.servlet.http.httpsession; @suppresswarnings («Сериал». Httpservletresponse response) throws servletexception, ioException {ServletOutputStream sos = response.getOutputStream (); Httpsession session = request.getsession (); int msgnum = integer.parseint (request.getParameter ("msgnum")); Папка папка = (папка) session.getAttribute ("folder"); try {message msg = folder.getMessage (msgnum); // Когда тип сообщения не является смешанным, это означает, что сообщение не содержит вложений, а содержимое сообщения напрямую выводится, если (! Msg.ismimeType ("Multipart/Mixed")) {response.setContentType ("Сообщение/RFC822"); msg.writeto (sos); } else {// Найти и выводить тело электронной почты в Multiplet MP = (multipart) msg.getContent (); int bodynum = mp.getCount (); for (int i = 0; i <bodynum; i ++) {bodypart bp = mp.getbodypart (i); / * * Когда заголовок сообщения MIME не содержит поля распоряжения, а тип сообщения MIME не является смешанным, * указывает, что полученное в настоящее время сообщение MIME - это тело электронной почты */if (! BP.ismimeType («Multipart/Mixed») && bp.getDisposition () == null) {response.sontenttype ("Сообщение/rfc82"); BP.Writeto (SOS); }}}} catch (Exception e) {e.printstacktrace (); }}}Используется для отображения корпуса электронной почты
Handleattact.java
Пакет почта; импорт java.io.ioexception; import java.io.inputstream; import javax.mail.mailpart; import javax.mail.folder; import javax.mail.message; импорт javax.mail.multipart; import javax.servlet.servletexception; import javax.servlet.servalteam; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; импорт javax.servlet.http.httpsessess; {public void doget (httpservletrequest, httpservletresponse response), выбросы Servletexception, ioexception {response.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"); Папка папка = (папка) session.getAttribute ("folder"); try {message msg = folder.getMessage (msgnum); // Установите тип заголовка сообщения на тип вложения response.setheader ("Содержимое-дисспосирование", "ATTHAMENT; FILENAME =" + FILENAME); Multipart multi = (multipart) msg.getContent (); BodyPart BodyPart = multi.getBodyPart (BodyNum); InputStream IS = BodyPart.getInputStream (); int c = 0; while ((c = is.read ())! = -1) {out.write (c); }} catch (Exception e) {e.printstackTrace (); }}}Используется для обработки вложений
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"> <Slace-Name> mailDemo </iname-name-name </display-name </display-name </wyply-fil <welcelcome-file> index.html </wervedied-file> <selcoversfile> index.htm </wervedied-file> <selcopport-file> index.jsp </wervedied-file> <welcelyfile> index.jsp </velocking-file> <welcelcome-file> default.html </wervedied-file> <werved> Defliefile file> default> default-file> wlevessp. </welcome-file-list> <servlet> <servlet-name>DisplayHead</servlet-name> <servlet-class>mail.DisplayHead</servlet-class> </servlet> <servlet-mapping> <servlet-name>DisplayHead</servlet-name> <url-pattern>/DisplayHead</url-pattern> </servlet-mapping> <servlet> <servlet-name>DisplayContent</servlet-name> <servlet-class>mail.DisplayContent</servlet-class> </servlet> <servlet-mapping> <servlet-mapping> <servlet-name>DisplayContent</servlet-name> <url-pattern>/DisplayContent</url-pattern> </servlet-mapping> <servlet> <servlet-name>HandleAttach</servlet-name> <Servlet-class> mail.handleattach </servlet-class> </servlet> <serlet-mapping> <servlet> <servlet-name> handleattach </servlet-name> <url-pattern>/handleattach </url-pattern> </servlet-mapping> </web-app
Сначала запустите сервер Tomcat, а затем введите http: // localhost: 8080/maildemo/index.html в браузере
Введите имя пользователя и пароль (код авторизации должен быть заполнен здесь. Каков код авторизации и как он установлен?)
Перечислите все сообщения в папке почты
Нажмите, чтобы просмотреть ссылку по электронной почте
Нажмите имя файла после вложения, чтобы загрузить соответствующее вложение.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.