Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2084547
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: Java

2008-05-18 14:01:00

看过在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;iid=id*10+(request.getParameter("id").charAt(i)-48);
for(j=0;jmessage[j].setFlag(Flags.Flag.SEEN,true);
out.println("");
out.println("");
out.println("");
String from=new String();
Address[] fr=message[j].getFrom();
if(fr!=null)
{ boolean tf=true;
for(int i=0;ifrom=from+getDisplayAddress(fr);
}
out.println("
");
out.println("");
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
{ ch=msg.charAt(i);
if(ch=='\n')buf.append("
");
else buf.append(ch);
}
out.println(buf.toString());
}
else
out.println("现在还无法显示:"+message[j].getContentType());
out.println("
");
out.println("
主题: "+message[j].getSubject()+"
来自: "+from+"
内容

");
Object o=message[j].getContent();
if (message[j].isMimeType("text/plain")) //若其Type为tex/plain就可直接读出了。
out.println((String)o+"
");
folder.close(true);
store.close();
%>
在Folder对象中可以用getMessageCount()和getUnreadMessageCount()方法来取得总共有多少封信和共有多少封信未读。

看过在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"); out.println(""); out.println(""); String from=new String(); Address[] fr=message[j].getFrom(); if(fr!=null) { boolean tf=true; for(int i=0;i"); out.println(""); 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 { ch=msg.charAt(i); if(ch=='\n')buf.append("
"); else buf.append(ch); } out.println(buf.toString()); } else out.println("现在还无法显示:"+message[j].getContentType()); out.println("
"); out.println("
主题: "+message[j].getSubject()+"
来自: "+from+"
内容

"); Object o=message[j].getContent(); if (message[j].isMimeType("text/plain")) //若其Type为tex/plain就可直接读出了。 out.println((String)o+"
"); folder.close(true); store.close(); %> 在Folder对象中可以用getMessageCount()和getUnreadMessageCount()方法来取得总共有多少封信和共有多少封
阅读(1084) | 评论(0) | 转发(0) |
0

上一篇:接口 Map

下一篇:JSP与Java Mail API

给主人留下些什么吧!~~