用Java Mail API查看邮件

<script type="text/javascript"> google_ad_client = "pub-8800625213955058"; /* 336x280, 创建于 07-11-21 */ google_ad_slot = "0989131976"; google_ad_width = 336; google_ad_height = 280; // </script> <script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script> 看过在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()方法来取得总共有多少封信和共有多少封信未读。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值