看过在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类提供邮件协议提供者可选参数,其目的是更有效地实现邮件组成成分的预提取。
一个例子:
private String getDisplayAddress(Address a) //转换RFC822为Unicode
{ String pers = null;
String addr = null;
if(a instanceof InternetAddress %26amp;%26amp;((pers=((InternetAddress)a).getPersonal())!=null))
addr=pers+" "+"";
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
id=id*10+(request.getParameter("id").charAt(i)-48);
for(j=0;j
message[j].setFlag(Flags.Flag.SEEN,true);
out.println("");
out.println("");
out.println("主题:
"+message[j].getSubject()+"
");
String from=new String();
Address[] fr=message[j].getFrom();
if(fr!=null)
{ boolean tf=true;
for(int i=0;i
from=from+getDisplayAddress(fr);
}
out.println("来自:
"+from+"
");
out.println(" 内容