不是所有的邮件服务器都支持这个。:(

解决方案 »

  1.   

    使用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==' 
    ')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(); 
    %>