<%@ page contentType="text/html; charset=gb2312"%> 用Java Mail API查看邮件
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
用Java Mail API查看邮件
     发布者: 发布时间:2007-09-23
看过在jsp中调用javamail后发现里面只有发邮件,没有收看邮件,且在收看邮件时有个很麻烦的内码转换问题,所以写这篇文章出来给大家看看。如有错误请写信给我。
使用Java Mail API的方法,主要的操作过程为:
● 获取javax.mail.Session实例,并进而获得javax.mail.Store实例。
● 利用javax.mail.Store实例获得缺省收件箱(INBOX)javax.mail.Folder实例。
● 使用javax.mail.Folder对象提取新邮件,存储为javax.mail.Message对象数组。
● 创建javax.mail.FetchProfile以(潜在地)优化对特定邮件组成成分的提取。
这里的javax.mail.FetchProfile类提供邮件协议提供者可选参数,其目的是更有效地实现邮件组成成分的预提取。
一个例子:
<%@ page language="java" contentType="text/html;charset=gb2312" %>
<%@ page import="java.util.*,java.io.*,java.text.*" %>
<%@ page import="javax.mail.*,javax.mail.internet.*,javax.activation.*" %>
<%!
private String getDisplayAddress(Address a) //转换RFC822为Unicode
{ String pers = null;
String addr = null;
if(a instanceof InternetAddress &&((pers=((InternetAddress)a).getPersonal())!=null))
addr=pers+" "+"<"+((InternetAddress)a).getAddress()+">";

else
addr = a.toString();
return addr;
}
%>
<%
Session mailsession=Session.getInstance(System.getProperties(),null);
mailsession.setDebug(false);
Store store=mailsession.getStore(protocol);//protocol为连接协议,IMAP或是POP
store.connect(mailhost,-1,user,passwd);//mailhost主机,user为用户名,passwd为密码
Folder folder = store.getFolder("INBOX");
try
{ folder.open(Folder.READ_WRITE);}
catch (MessagingException ex)
{ folder.open(Folder.READ_ONLY);}
Message message[]=folder.getMessages();
FetchProfile fp=new FetchProfile();
fp.add(FetchProfile.Item.ENVELOPE);
fp.add(FetchProfile.Item.FLAGS);
fp.add("X-Mailer");
folder.fetch(message,fp);
int id=0,j=0;
for(int i=0;i<request.getParameter("id").length();i++)//假设要阅读第ID个邮件。
id=id*10+(request.getParameter("id").charAt(i)-48);
for(j=0;j<id;j++);
message[j].setFlag(Flags.Flag.SEEN,true);
out.println("<table width=\"550\" border=\"1\" cellpadding=\"0\" cellspacing=\"0\" borderColorDark=\"#eaf0ff\" borderColorLight=\"#000000\" align=\"center\">");
out.println("<tr>");
out.println("<td width=60>主题:</td><td width=490> "+message[j].getSubject()+" </td></tr>");
String from=new String();
Address[] fr=message[j].getFrom();
if(fr!=null)
{ boolean tf=true;
for(int i=0;i<fr.length;i++)
from=from+getDisplayAddress(fr);
}
out.println("<tr><td width=60>来自:</td><td width=490> "+from+" </td></tr>");
out.println("<tr><td colspan=\"2\"> <div align=\"center\"><b>内容</b></div><br>");
Object o=message[j].getContent();
if (message[j].isMimeType("text/plain")) //若其Type为tex/plain就可直接读出了。
out.println((String)o+"</td>");
else if(message[j].isMimeType("multipart/*"))
{ Multipart mp=(Multipart)o;
Part part=mp.getBodyPart(0);
String msg=(String)part.getContent();
StringBuffer buf=new StringBuffer(msg.length()+6);
char ch=' ';
for(int i=0;i<msg.length();i++)//若遇到换行就转为<br>
{ ch=msg.charAt(i);
if(ch=='\n')buf.append("<br>");
else buf.append(ch);
}
out.println(buf.toString());
}
else
out.println("现在还无法显示:"+message[j].getContentType());
out.println("</tr>");
out.println("<table>");
folder.close(true);
store.close();
%>
在Folder对象中可以用getMessageCount()和getUnreadMessageCount()方法来取得总共有多少封信和共有多少封信未读。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
javamail 发送附件的例子
把JavaMail包装成简单的Sendmail
用javamail进行认证发信
Java电子邮件
JSP与JavaMail (一)
JSP与JavaMail (二)
 
最近评论:
        
鍥炲
        
如果真的有来生!
四川旅游,九寨沟旅游,稻城亚丁旅游,四姑娘山旅游,海螺沟旅游,西藏旅游, max(1992)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(5537)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(8241)
        
不在的哪天!
final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,final fantasy xi gil, max(6102)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(1590)
        
昨夜的狂想曲!
wow gold,WoW Gold,world of warcraft gold,WoW Gold, max(2842)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(5118)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(1787)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(6415)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号