Artikel sebelumnya introduction to Javamail, artikel keempat dalam menerima email, kami tidak dapat membaca konten yang dicetak di konsol. Bahkan, tidak mudah untuk membiarkan kami menganalisis email yang kompleks sendiri. Format dan spesifikasi dalam email sangat rumit. Namun, browser yang kami gunakan adalah modul pemrosesan data bawaan untuk menganalisis berbagai tipe data. Kita hanya perlu menentukan dengan jelas tipe data yang dimiliki aliran data sebelum mengirimkan aliran data ke browser. Setelah itu, semua operasi parsing akan secara otomatis diselesaikan oleh browser. Gambar berikut dapat menjelaskan langkah -langkah untuk menguraikan email dengan baik
1. Hubungi GetFrom, GetSubject dan metode lain dari objek pesan untuk mendapatkan pengirim dan subjek email, dan hubungi metode GetContentType untuk mendapatkan jenis email;
2. Gunakan nilai pengembalian dari Metode Message.getContentType untuk menentukan jenis email, dan hubungi metode pesan.getContent untuk mendapatkan konten email. Jika jenis emailnya adalah "teks/polos" atau "teks/html", itu berarti bahwa konten email adalah teks biasa. Pada saat ini, hubungi metode GetContent dari objek pesan untuk mendapatkan konten email, dan kemudian mengonversi jenis objek yang dikembalikan menjadi string dan mengeluarkannya ke perangkat lunak tampilan. Jika jenis pesan adalah "multipart/*", itu berarti bahwa konten pesan adalah jenis senyawa. Pada saat ini, objek yang diperparah oleh metode. GetContent Metode perlu dikonversi menjadi multipart.
3. Panggil metode getCount dari objek multipart untuk mendeteksi berapa banyak objek bodypart yang dienkapsulasi dalam objek multipart, dan mengeluarkan setiap objek bodypart dalam objek multipart satu per satu melalui loop untuk pemrosesan.
4. Saat memproses setiap objek BodyPart, pertama panggil metode getContentType dari objek BodyPart untuk mendapatkan tipe MIME -nya, dan kemudian menangani tiga situasi berikut berdasarkan tipe MIME:
Ketika tipe MIME adalah "Teks/*", itu berarti bahwa objek BODYPART disimpan dalam data teks biasa, seperti yang ditunjukkan pada gambar di atas. Pada saat ini, metode GetContent dari objek BodyPart pertama dan mengubah objek yang dikembalikan menjadi string dan mengeluarkannya ke perangkat lunak tampilan untuk ditampilkan.
Ketika tipe MIME mewakili data biner seperti gambar, suara, atau lampiran, seperti pada "Image/GIF" pada gambar di atas, metode GetDataHandler dari objek Bodypart harus dipanggil untuk mendapatkan objek DataHanlder yang dienkapsulasi oleh data, dan kemudian metode GetInputstream dari objek dataahandler dipanggil untuk mendapatkan objek yang terkait dengan data. Konten data biner asli dapat diperoleh melalui objek inputstream ini.
Ketika tipe MIME adalah "Multipart/Mixed", itu berarti bahwa objek Bodypart disimpan dalam pesan senyawa MIME. Pada saat ini, metode GetContent dari objek BODYPART harus dipanggil untuk mendapatkan objek yang merangkum pesan senyawa MIME dan mengubahnya ke tipe multipart. Kemudian ulangi langkah ke -3 dan ke -4 untuk melakukan panggilan rekursif ke objek multipart.
Mari kita tulis program yang menerima dan menguraikan lampiran
Pop3help.java
Paket surat; import java.util.properties; import javax.mail.folder; import javax.mail.Session; import javax.mail.store; kelas publik pop3help {public static folder getFolder (host string, string username, string password) {Properties prop = new Properties (); prop.setProperty ("mail.store.protocol", "Pop3"); prop.setProperty ("mail.pop3.host", host); Sesi mailsession = session.getDefaultInstance (prop, null); mailsession.setDebug (false); coba {store store = mailsession.getStore ("POP3"); Store.Connect (host, nama pengguna, kata sandi); Folder folder = store.getFolder ("inbox"); folder.open (folder.read_write); folder kembali; } catch (Exception e) {E.PrintStackTrace (); } return null; }}Kelas ini digunakan untuk terhubung dan masuk ke server POP3 dan mengembalikan objek folder yang mewakili folder email
index.html
<html> <head> <title> login.html </title> </ head> <body> <form aksi = "login.jsp" method = "post"> nama host: <input name = "host" type = "text"> <br/> nama pengguna: <input nama = "input =" input "type" type = "Teks"> <br/> <br/> kata sandi: <"input =" input = "uSername" type = "Text" value = "Kirim"> <input type = "reset" value = "reset"> </form> </body> </html>
Halaman login, pengguna perlu mengisi nama host, nama pengguna, dan kata sandi dari server email
Login.jsp
<%@ page impor = "javax.mail.*, mail.*" contentType = "text/html; charset = gb2312"%> <%string host = request.getParameter ("host"); String username = request.getParameter ("nama pengguna"); String password = request.getParameter ("password"); String from = ""; String subjek = ""; Folder folder = pop3help.getFolder (host, nama pengguna, kata sandi); session.setAttribute ("folder", folder); Pesan [] pesan = folder.getMessages (); untuk (int i = 0; i <pesan.length; i ++) {coba {from = pesan [i] .getFrom () [0] .toString (); subjek = pesan [i] .getSubject (); out.print (i + 1);%> alamat pengirim: <%= dari%> Subjek email: <%= subjek%> <a href = "displaymsg.jsp? msGnum = <%= i + 1%>"> Lihat email </a> <br/> <%} catch (pengecualian e) {}}%>%>%Dapatkan semua pesan di folder email
displaymsg.jsp
<frameset rows="25%,*"> <frame src="/mailDemo/DisplayHead?msgnum=<%=request.getParameter("msgnum")%>" scrolling="no"> <frame src="/mailDemo/DisplayContent?msgnum=<%=request.getParameter("msgnum")%>" Scrolling = "no"> </fameset>Informasi yang digunakan untuk menampilkan email
Displayhead.java
Paket surat; import java.io.ioException; import java.io.printwriter; impor java.text.dateFormat; impor javax.mail.bodypart; import javax.mail.folder; import javax.mail.message; import javax.mail.multipart; impor javax.message; mort; javax.servlet.servletException; import javax.servlet.http.httpservlet; impor javax.servlet.http.httpservletRequest; impor javax.servlet.http.httpservletResponse; impor javax.servlet.http.httpsession; @suppresswarnings ("serial") DisplayHead kelas publik memperluas httpservlet {public void doGet (httpservletRequest, respons httpservletResponse) melempar servletexception, ioException {httpservletResponse) melakukan servletexception, ioException {httpservletResponse) response.setContentType ("Teks/html; charset = GB2312"); Printwriter out = response.getWriter (); Httpsession sesi = request.getSession (); int msGnum = integer.parseint (request.getParameter ("msGnum")); Folder folder = (folder) session.getAttribute ("folder"); coba {pesan msg = folder.getMessage (msGnum); String dari = msg.getfrom () [0] .toString (); String subjek = msg.getSubject (); String sendDate = dateFormat.getInstance (). Format (msg.getSentDate ()); out.println ("Subjek email:" + subjek + "<br/>"); out.println ("pengirim:" + dari + "<br/>"); out.println ("Tanggal Kirim:" + SendDate + "<br/> <br/>"); System.out.println ("ContentType:" + msg.getContentType ()); // Jika pesannya adalah kombinasi "multipart/*", itu mungkin berisi lampiran, dll. (Msg.ismimetype ("multipart/*")) {multipart mp = (multipart) msg.getContent (); untuk (int i = 0; i <mp.getCount (); i ++) {bodypart bp = mp.getbodypart (i); // Jika objek BodyPart berisi lampiran, itu harus diuraikan jika (bp.getDisposition ()! = Null) {string filename = bp.getFileName (); System.out.println ("nama file:" + nama file); if (filename.startswith ("=?")) {// encode nama file untuk mematuhi RFC822 spesifikasi fileName = mimeutility.decodetext (fileName); } // menghasilkan hyperlink untuk membuka lampiran out.print ("lampiran:"); out.print ("<a href = handleattach? msGnum =" + msGnum + "&& bodynum =" + i + "&& filename =" + fileName + ">" + fileName + "</a> <br/>"); }}}} catch (Exception e) {E.PrintStackTrace (); }}}Digunakan untuk menampilkan konten header email
DisplayContent.java
Paket surat; import java.io.ioException; import javax.mail.bodypart; import javax.mail.folder; import javax.mail.message; import javax.multipart; import javax.servlet.servletException; impor javax.servlet.servletsstreamstream; javax.servlet.http.httpservlet; import javax.servlet.http.httpservletRequest; import javax.servlet.http.httpservletRespresse; soMer -lemparan (soMercont.http.httpresspress; @suppress; public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {servletoutputStream sos = response.getoutputStream (); Httpsession sesi = request.getSession (); int msGnum = integer.parseint (request.getParameter ("msGnum")); Folder folder = (folder) session.getAttribute ("folder"); coba {pesan msg = folder.getMessage (msGnum); // Ketika jenis pesan tidak dicampur, itu berarti bahwa pesan tidak berisi lampiran, dan konten pesan langsung output jika (! Msg.ismimetype ("multipart/mixed")) {response.setContentType ("pesan/rfc822"); msg.writeto (SOS); } else {// temukan dan output badan email di email multipart mp = (multipart) msg.getContent (); int bodynum = mp.getCount (); untuk (int i = 0; i <bodynum; i ++) {bodypart bp = mp.getbodypart (i); / * * Ketika header pesan MIME tidak berisi bidang disposisi, dan tipe pesan MIME tidak dicampur, * menunjukkan bahwa pesan MIME yang saat ini diperoleh adalah badan email */if (! Bp.ismimetype ("multipart/campuran") && bp.getdisposition () == null) {response.setcontentType ("pesan/pesan/" ") {response.setcontentType (" pesan/"" ") {Mulpespart. BP.Writeto (SOS); }}}} catch (Exception e) {E.PrintStackTrace (); }}}Digunakan untuk menampilkan badan email
Handleattact.java
Paket surat; import java.io.ioException; import java.io.inputstream; import javax.mail.bodypart; import javax.mail.folder; impor javax.mail.message; impor javax.multipart; impor javax.servlet.servletexception; impor javax. javax.servlet.http.httpservlet; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresspress; @suppress; {public void doGet (permintaan httpservletRequest, respons httpservletResponse) melempar servletException, ioException {response.setContentType ("text/html"); Httpsession sesi = request.getSession (); ServeLetoutputStream out = response.getoutputStream (); int msGnum = integer.parseint (request.getParameter ("msGnum")); int bodynum = integer.parseint (request.getParameter ("bodynum")); String filename = request.getParameter ("fileName"); Folder folder = (folder) session.getAttribute ("folder"); coba {pesan msg = folder.getMessage (msGnum); // Atur jenis header pesan ke lampiran tipe response.setHeader ("Disposisi Konten", "Lampiran; FileName =" + FileName); Multi -multi = (multipart) msg.getContent (); Bodypart bodypart = multi.getbodypart (bodynum); InputStream adalah = bodypart.getInputStream (); int c = 0; while ((c = is.read ())! = -1) {out.write (c); }} catch (Exception e) {e.printstacktrace (); }}}Digunakan untuk menangani lampiran
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/xmlns =" http://java.com/xmlns = "http://java.com/xmlns = 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" Versi = "2.5"> <play-name> kiriman> <peray-noMe-name> <peray-name> <peray- name> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </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> <servlet-papping> <servlet-papping> <servlet-name> handleeattach </servlet-name> <rerl-pattern>/handleattach </url-pola> </servlet-mapping> </web-appat>
Pertama mulai server Tomcat, lalu masukkan http: // localhost: 8080/maildemo/index.html di browser
Masukkan nama pengguna dan kata sandi (kode otorisasi perlu diisi di sini. Apa kode otorisasi dan bagaimana itu diatur?)
Buat daftar semua pesan di folder email
Klik untuk melihat tautan email
Klik nama file setelah lampiran untuk mengunduh lampiran yang sesuai.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.