我自己写了一个发现当邮件带附件的时候,程序就不能够正确的解析出发送的文本内容.如果不发附件则一切都没问题,我用的是从新浪的邮箱中取电子邮件,其中新浪邮箱中的EMAIL是用QQ邮箱发的.
源码如下:import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeUtility;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class AcceptEmail extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
    response.setContentType("text/html;charset=gb2312");
    Properties props=System.getProperties();
    props.setProperty("mail.store.protocol", "pop3");
    PrintWriter out=response.getWriter();
    PrintWriter pw=new PrintWriter(new FileOutputStream(new File("c:\\log.txt"),true),true);
    Session mailsession=Session.getDefaultInstance(props);
    try {
Store store=mailsession.getStore();
store.connect("pop.sina.com", "simplejava_test1", "19870823aaa");
Folder f=store.getFolder("inbox");
request.getSession().setAttribute("folder", f);
f.open(Folder.READ_WRITE);
Message msg[]=f.getMessages();
out.println("<html><head><title></title></head><body><div align='center'>" +
"<table border='1'><th colspan=\"2\">你的邮箱中有"+f.getMessageCount()+"封信</th>");
for(int i=0;i<msg.length;i++){
String from=msg[i].getFrom()[0].toString();
from=from.replaceAll("^.+<(.+)>$","$1");
out.println("<tr><td>邮件编号:</td><td>"+(i+1)+"</td></tr>");
out.println("<tr><td>发信人地址:</td><td>"+from+"</td></tr>");

                    if(msg[i].isMimeType("multipart/*")){
                     Multipart mp=(Multipart)msg[i].getContent();
                     int bodynum=mp.getCount();
                     String content="";
                     for(int j=0;j<bodynum;j++){
                    
                     if(mp.getBodyPart(j).isMimeType("text/html")){
                     content=(String)mp.getBodyPart(j).getContent()+"<br>";
                    
                     }
                     else{
                    
                                 if(mp.getBodyPart(j).getDisposition()!=null){
                                  out.print("<tr><td>附件:</td>");
                                 String filename=mp.getBodyPart(j).getFileName();
                                 if(filename==null)filename="未命名";
                                 filename=filename.startsWith("=?")?filename:MimeUtility.decodeText(filename);
                                 out.print("<td><a href=\\MailTest\\getHandle?msgnum="+i+"&bodynum="+j+">");
                                 out.print(filename);
                                 out.print("</a></td></tr>");
                                 }
                               
                     }
                     }
                     out.println("<tr><td>发信内容:</td><td>"+content+"</td></tr>");
                
                    }
Date sentdate=msg[i].getSentDate();
String date=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(sentdate);
out.println("<tr><td>发信日期:</td><td>"+date+"</td></tr>");
}
out.println("</table></div></body></html>");
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
pw.println(e.getMessage());
} catch (MessagingException e) {
// TODO Auto-generated catch block
                pw.println(e.getMessage());
                out.println("<html><head><title>连接失败,请检查网络或邮箱设置</title></head>");
                out.println("<body><p align='center' color='red'> 连接失败,请稍后再试</p></body></html>");
}
} public void doPost(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException {    doGet(arg0,arg1);
}

}