我自己写了一个发现当邮件带附件的时候,程序就不能够正确的解析出发送的文本内容.如果不发附件则一切都没问题,我用的是从新浪的邮箱中取电子邮件,其中新浪邮箱中的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);
}
}
源码如下: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);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货