?? 0215.htm
字號:
<html>
<head>
<title>新時代軟件教程:操作系統 主頁制作 服務器 設計軟件 網絡技術 編程語言 文字編輯</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<style>
<!--
body, table {font-size: 9pt; font-family: 宋體}
a {text-decoration:none}
a:hover {color: red;text-decoration:underline}
.1 {background-color: rgb(245,245,245)}
-->
</style>
</head>
<p align="center"><script src="../../1.js"></script></a>
<p align="center"><big><strong>用Java Mail API查看郵件</strong></big></p>
<div align="right">---摘自互聯網</div>
<br>看過在jsp中調用javamail后發現里面只有發郵件,沒有收看郵件,且在收看郵件時有個很麻煩的內碼轉換問題,所以寫這篇文章出來給大家看看。如有錯誤請寫信給我。<br>
使用Java Mail API的方法,主要的操作過程為:<br>
● 獲取javax.mail.Session實例,并進而獲得javax.mail.Store實例。<br>
● 利用javax.mail.Store實例獲得缺省收件箱(INBOX)javax.mail.Folder實例。<br>
● 使用javax.mail.Folder對象提取新郵件,存儲為javax.mail.Message對象數組。<br>
● 創建javax.mail.FetchProfile以(潛在地)優化對特定郵件組成成分的提取。<br>
這里的javax.mail.FetchProfile類提供郵件協議提供者可選參數,其目的是更有效地實現郵件組成成分的預提取。<br>
一個例子:<br>
<%@ page language="java" contentType="text/html;charset=gb2312" %><br>
<%@ page import="java.util.*,java.io.*,java.text.*" %><br>
<%@ page import="javax.mail.*,javax.mail.internet.*,javax.activation.*" %><br>
<%!<br>
private String getDisplayAddress(Address a) //轉換RFC822為Unicode<br>
{ String pers = null;<br>
String addr = null;<br>
if(a instanceof InternetAddress &&((pers=((InternetAddress)a).getPersonal())!=null))<br>
addr=pers+" "+"<"+((InternetAddress)a).getAddress()+">";<br>
<br>
else <br>
addr = a.toString();<br>
return addr;<br>
}<br>
%><br>
<%<br>
Session mailsession=Session.getInstance(System.getProperties(),null);<br>
mailsession.setDebug(false);<br>
Store store=mailsession.getStore(protocol);//protocol為連接協議,IMAP或是POP<br>
store.connect(mailhost,-1,user,passwd);//mailhost主機,user為用戶名,passwd為密碼<br>
Folder folder = store.getFolder("INBOX");<br>
try <br>
{ folder.open(Folder.READ_WRITE);} <br>
catch (MessagingException ex) <br>
{ folder.open(Folder.READ_ONLY);}<br>
Message message[]=folder.getMessages();<br>
FetchProfile fp=new FetchProfile();<br>
fp.add(FetchProfile.Item.ENVELOPE);<br>
fp.add(FetchProfile.Item.FLAGS);<br>
fp.add("X-Mailer");<br>
folder.fetch(message,fp);<br>
int id=0,j=0;<br>
for(int i=0;i<request.getParameter("id").length();i++)//假設要閱讀第ID個郵件。<br>
id=id*10+(request.getParameter("id").charAt(i)-48);<br>
for(j=0;j<id;j++);<br>
message[j].setFlag(Flags.Flag.SEEN,true);<br>
out.println("<table width=\"550\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" borderColorDark=\"#eaf0ff\" borderColorLight=\"#000000\" align=\"center\">");<br>
out.println("<tr>");<br>
out.println("<td width=60>主題:</td><td width=490> "+message[j].getSubject()+" </td></tr>");<br>
String from=new String();<br>
Address[] fr=message[j].getFrom();<br>
if(fr!=null)<br>
{ boolean tf=true;<br>
for(int i=0;i<fr.length;i++)<br>
from=from+getDisplayAddress(fr);<br>
}<br>
out.println("<tr><td width=60>來自:</td><td width=490> "+from+" </td></tr>");<br>
out.println("<tr><td colspan=\"2\"> <div align=\"center\"><b>內容</b></div><br>");<br>
Object o=message[j].getContent();<br>
if (message[j].isMimeType("text/plain")) //若其Type為tex/plain就可直接讀出了。<br>
out.println((String)o+"</td>");<br>
else if(message[j].isMimeType("multipart/*"))<br>
{ Multipart mp=(Multipart)o;<br>
Part part=mp.getBodyPart(0);<br>
String msg=(String)part.getContent();<br>
StringBuffer buf=new StringBuffer(msg.length()+6);<br>
char ch=' ';<br>
for(int i=0;i<msg.length();i++)//若遇到換行就轉為<br><br>
{ ch=msg.charAt(i);<br>
if(ch=='\n')buf.append("<br>");<br>
else buf.append(ch);<br>
}<br>
out.println(buf.toString());<br>
}<br>
else<br>
out.println("現在還無法顯示:"+message[j].getContentType());<br>
out.println("</tr>");<br>
out.println("<table>");<br>
folder.close(true);<br>
store.close();<br>
%><br>
在Folder對象中可以用getMessageCount()和getUnreadMessageCount()方法來取得總共有多少封信和共有多少封信未讀。
</table>
<p align="center"><script src="../../2.js"></script></a>
</body>
</html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -