JavaMail(4)------- GetMail
来源:互联网 发布:网吧维护公司网站源码 编辑:程序博客网 时间:2024/06/05 15:13
- 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>
- JavaMail(4)------- GetMail
- getmail的一个问题
- 【javaMail】javaMail(4)电子邮件的一些基本常识
- 4、javamail
- 【javaMail】javaMail(2)课程目标
- getmail: refuse to deliver mail as root
- javamail API----(4)
- JavaMail(2)-------SendHtmlMail
- JavaMail(3)------SendAttachMail
- javamail总结(一)
- javaMail 使用(初步)
- (一)JavaMail 简介
- JavaMail自学(-) 基础知识
- JavaMail
- JavaMail
- javaMail
- JavaMail
- javamail
- JavaMail(2)-------SendHtmlMail
- linux/windows库准备工作
- 新手入门之 Visual C#命名空间详解
- JavaMail(3)------SendAttachMail
- 词法分析程序 C++/C
- JavaMail(4)------- GetMail
- 三年回顾与展望
- 数据转换
- 宏定义swap(X,Y)
- 铁血联盟2源码学习笔记--Makefile边看边学2
- 40个迹象表明你还是PHP菜鸟
- struts2的ognl语言中#号作用和%号作用
- 爱是平等的、无私的、永恒的 - 赵本山
- Windows程序调试--PE文件