已经解决好久了没解决出来,拜托各位了!
代码是参考网上的,原来使用ServletOutputStream输出是可以正确显示内容的,但是会在一个空白页面显示,不是我想要的像普通邮箱的那种显示邮件内容的效果。
网上说要用(String)part.getContent(),我用了然后会报错javax.mail.internet.MimeMultipart cannot be cast to java.lang.String
为什么呀,到底哪里不对?
感激不尽!!求助~
package mail;
import java.io.IOException;
import java.io.OutputStreamWriter;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
@SuppressWarnings("serial")
public class DisplayContent extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletOutputStream sos = response.getOutputStream();
HttpSession session = request.getSession();
int msgnum = Integer.parseInt(request.getParameter("msgnum"));
Folder folder = (Folder) session.getAttribute("folder");
StringBuffer bodyText=new StringBuffer();
try {
Message msg = folder.getMessage(msgnum);
// 邮件类型不是mixed时,表示邮件中不包含附件,直接输出邮件内容
if (!msg.isMimeType("multipart/mixed")) {
// response.setContentType("message/rfc822");
// msg.writeTo(sos);
Part part=(Part)msg;
Object o=(Object)part.getContent();
bodyText.append((String) o);
System.out.println("bodyText.toString():"+bodyText.toString());
} else {
// 查找并输出邮件中的邮件正文
Multipart mp = (Multipart) msg.getContent();
int bodynum = mp.getCount();
for (int i = 0; i < bodynum; i++) {
BodyPart bp = mp.getBodyPart(i);
/*
* MIME消息头中不包含disposition字段, 并且MIME消息类型不为mixed时,
* 表示当前获得的MIME消息为邮件正文
*/
if (!bp.isMimeType("multipart/mixed") && bp.getDisposition() == null) {
response.setContentType("message/rfc822");
bp.writeTo(sos);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}