- package test;
- import javax.mail.*;
- import java.io.*;
- import java.text.*;
- import java.util.*;
- import java.util.Enumeration;
- public class GetMail {
- String POP3Host=""; //POP3服務器
- String user=""; //登錄POP3服務器的帳號
- String password=""; //登錄POP3服務器的密碼
- Session session = null;
- Folder folder = null;
- Store store = null;
- //無參數的構造函數
- public GetMail() {}
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- public String getPOP3Host() {
- return POP3Host;
- }
- public void setPOP3Host(String host) {
- POP3Host = host;
- }
- public String getUser() {
- return user;
- }
- public void setUser(String user) {
- this.user = user;
- }
- //連接郵件服務器
- public void connect() throws Exception{
- //創建一個授權驗證對象
- POP3Auth auth = new POP3Auth();
- auth.setAccount(user,password);
- //取得一個Session對象
- Properties prop=new Properties();
- prop.put("mail.pop3.host",POP3Host);
- session=Session.getDefaultInstance(prop,auth);
- //取得一個Store對象
- store=session.getStore("pop3");
- store.connect(POP3Host,user,password);
- //取得一個Folder對象
- folder=store.getDefaultFolder().getFolder("INBOX");
- folder.open(Folder.READ_ONLY);
- }
- //獲得所有郵件的列表
- public Message[] getAllMail() throws Exception
- {
- //建立POP3連接
- connect();
- //取得所有的Message對象
- Message[] msg=folder.getMessages();
- FetchProfile profile=new FetchProfile();
- profile.add(FetchProfile.Item.ENVELOPE);
- folder.fetch(msg,profile);
- return msg;
- }
- //取得郵件列表的信息
- public List getMailInfo(Message[] msg) throws Exception
- {
- List result = new ArrayList();
- Map map = null;
- Multipart mp = null;
- BodyPart part = null;
- String disp = null;
- SimpleDateFormat fmt = new SimpleDateFormat("yyyy年MM月dd日 hh:mm:ss");
- Enumeration enum = null;
- //取出每個郵件的信息
- for (int i=0;i<msg.length;i++){
- map = new HashMap();
- //讀取郵件ID
- enum = msg[i].getAllHeaders();
- Header h = null;
- while (enum.hasMoreElements()){
- h = (Header)enum.nextElement();
- if (h.getName().equals("Message-ID")){
- map.put("ID",h.getValue());
- }
- }
- //讀取郵件標題
- map.put("subject",msg[i].getSubject());
- //讀取發件人
- map.put("sender",msg[i].getFrom()[0].toString());
- //讀取郵件發送日期
- map.put("senddate",fmt.format(msg[i].getSentDate()));
- //讀取郵件大小
- map.put("size",new Integer(msg[i].getSize()));
- map.put("hasAttach"," ");
- //判斷是否有附件
- if(msg[i].isMimeType("multipart/*")){
- mp=(Multipart)msg[i].getContent();
- //遍歷每個Miltipart對象
- for (int j=0;j<mp.getCount();j++){
- part = mp.getBodyPart(j);
- disp = part.getDisposition();
- //如果有附件
- if(disp!=null && (disp.equals(Part.ATTACHMENT)||disp.equals(Part.INLINE))){
- //設置有附件的特徵值
- map.put("hasAttach","√");
- }
- }
- }
- result.add(map);
- }
- return result;
- }
- //查找指定郵件
- public Message findMail(String id) throws Exception
- {
- Message[] msg = getAllMail();
- Enumeration enum = null;
- Header h = null;
- for (int i=0;i<msg.length;i++){
- enum = msg[i].getAllHeaders();
- //查找郵件頭中的Message-ID項
- while (enum.hasMoreElements()){
- h = (Header)enum.nextElement();
- //根據傳入的message-id來查找目標郵件
- if ((h.getName().equals("Message-ID"))&&(h.getValue().equals(id))){
- return msg[i];
- }
- }
- }
- return null;
- }
- //讀取郵件內容
- public Map readMail(String basePath,String id) throws Exception{
- Map map = new HashMap();
- //找到目標郵件
- Message msg = findMail(id);
- //讀取郵件標題
- map.put("subject",msg.getSubject());
- //讀取發件人
- map.put("sender",msg.getFrom()[0].toString());
- map.put("attach","");
- //取得郵件內容
- if (msg.isMimeType("text/*")){
- map.put("content",msg.getContent().toString());
- }else{
- StringBuffer result = new StringBuffer();
- Multipart mp=(Multipart)msg.getContent();
- BodyPart part = null;
- String disp = null;
- //遍歷每個Miltipart對象
- for (int j=0;j<mp.getCount();j++){
- part = mp.getBodyPart(j);
- disp = part.getDisposition();
- //如果有附件
- if(disp!=null && (disp.equals(Part.ATTACHMENT)||disp.equals(Part.INLINE))){
- //取得附件文件名
- String filename = part.getFileName();
- filename = new String(filename.getBytes("ISO8859-1"),"gb2312");
- map.put("attach",filename);
- //下載附件
- InputStream in=part.getInputStream();
- filename = basePath + "/"+filename;
- FileOutputStream out=new FileOutputStream(new File(filename));
- byte[] content=new byte[255];
- int read=0;
- while((read=in.read(content))!=-1)
- {
- out.write(content);
- }
- out.close();
- in.close();
- }else{
- result.append(part.getContent().toString());
- }
- }
- map.put("content",result.toString());
- }
- return map;
- }
- //定義一個POP3授權驗證類
- static class POP3Auth extends Authenticator{
- String user,password;
- //設置帳號信息
- void setAccount(String user,String password){
- this.user = user;
- this.password = password;
- }
- //取得PasswordAuthentication對象
- protected PasswordAuthentication getPasswordAuthentication(){
- return new PasswordAuthentication(user,password);
- }
- }
- }
- <html>
- <head>
- <title>收取郵件</title>
- <meta http-equiv="content-type" content="text/html; charset=gb2312">
- </head>
- <body>
- <h2>收取郵件</h2>
- <hr>
- <form name="form1" method="post" action="MailList.jsp">
- POP3服務器:<input type="text" id="POP3Host" name="POP3Host"><br>
- 登錄帳號:<input type="text" id="user" name="user"><br>
- 登錄密碼:<input type="password" id="password" name="password"><br>
- <br>
- <input type="submit" name="submit" value="確定">
- <input type="reset" name="reset" value="重填">
- </form>
- </body>
- </html>
顯示收到郵件列表,MailList.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
- <%@ page import="test.GetMail"%>
- <jsp:useBean id="receiver" class="test.GetMail" scope="session"></jsp:useBean>
- <jsp:setProperty name="receiver" property="*"/>
- <html>
- <head>
- <title>我的收件箱</title>
- </head>
- <body>
- <h2>我的收件箱</h2>
- <hr>
- <table border=1 width=700>
- <tr height=30 bgcolor=#dddddd>
- <td align=center>郵件標題</td>
- <td width=150 align=center>發件人</td>
- <td width=180 align=center>發件時間</td>
- <td width=80 align=center>郵件大小</td>
- <td width=50 align=center>附件</td>
- </tr>
- <%
- //取得郵件列表信息
- Iterator it = receiver.getMailInfo(receiver.getAllMail()).iterator();
- Map map = null;
- //將郵件信息列表顯示
- while (it.hasNext()){
- map = (Map)it.next();
- out.println("<tr height=30 valign=middle align=center>");
- out.println("<td><a href='readMail.jsp?id="+map.get("ID")+"' target='_blank'>"+map.get("subject")+"</a></td>");
- out.println("<td>"+map.get("sender")+"</td>");
- out.println("<td>"+map.get("senddate")+"</td>");
- out.println("<td>"+map.get("size")+"</td>");
- out.println("<td>"+map.get("hasAttach")+"</td>");
- out.println("</tr>");
- }
- %>
- </table>
- </body>
- </html>
閱讀郵件內容 readMail.jsp
- <%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
- <%@ page import="test.GetMail"%>
- <%
- //從session中取出receiver
- GetMail receiver = (GetMail)session.getAttribute("receiver");
- %>
- <html>
- <head>
- <title>閱讀郵件</title>
- </head>
- <body>
- <h2>閱讀郵件</h2>
- <hr>
- <table border=1 width=700 cellpadding=4>
- <%
- //取得請求參數
- String id = request.getParameter("id");
- //取得當前目錄的物理路徑
- String basePath = request.getRealPath(".");
- //取得指定的郵件內容
- Map result = receiver.readMail(basePath,id);
- %>
- <tr>
- <td width=100 align=right bgcolor=#dddddd>郵件標題</td>
- <td><%=result.get("subject")%></td>
- </tr>
- <tr>
- <td width=100 align=right bgcolor=#dddddd>發 件 人</td>
- <td><%=result.get("sender")%></td>
- </tr>
- <%
- String attach =result.get("attach").toString();
- //有附件時才顯示下面的一行
- if (attach.trim().length()>0){
- %>
- <tr>
- <td width=100 align=right bgcolor=#dddddd>附 件</td>
- <td><a href="<%=result.get("attach")%>"><%=result.get("attach")%></a></td>
- </tr>
- <%}%>
- <tr>
- <td width=100 valign=top align=right bgcolor=#dddddd>內 容</td>
- <td><BLOCKQUOTE><%=result.get("content")%></BLOCKQUOTE></td>
- </tr>
- </table>
- </body>
- </html>