[英]Why does Javamail throw an IOException if a plain/text message should be opened?
我使用以下代碼來讀取消息對象的主體:
Object content = _message.getContent();
String body = null;
if (content instanceof String) {
body = (String) content;
} else if (content instanceof Multipart) {
Multipart multipart = (Multipart) content;
BodyPart part = multipart.getBodyPart(0);
body = (String) part.getContent();
}
當內容是多部分時,一切正常,但是當內容只是text / plain時,我得到以下異常(在第1行的getContent()調用中已經!):
13.01.2011 17:22:23 org.zkoss.zk.ui.impl.UiEngineImpl handleError:1253
SCHWERWIEGEND: >>org.zkoss.zk.ui.UiException: java.io.IOException
java.io.IOException
at javax.mail.internet.MimePartDataSource.getInputStream(MimePartDataSource.java:108)
at com.sun.mail.handlers.text_plain.getContent(text_plain.java:90)
at javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:775)
at javax.activation.DataHandler.getContent(DataHandler.java:522)
at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1396)
我還嘗試了JavaMail FAQ中顯示的代碼: http : //www.oracle.com/technetwork/java/faq-135477.html#mainbody
結果相同。
通過在IMAPFolder實例上調用getMessages(n)來檢索消息。 文件夾實例來自IMAPStore對象。
我完全沒有想法會出現什么問題......有沒有人有想法?
該死的,我發現了這個問題。 我需要在調用getContent()之前打開文件夾。 以下代碼現在運行良好:
Folder folder = _message.getFolder();
// Open folder in read-only mode
if (folder.isOpen()) {
if ((folder.getMode() & Folder.READ_WRITE) != 0) {
folder.close(false);
folder.open(Folder.READ_ONLY);
}
} else {
folder.open(Folder.READ_ONLY);
}
Object content = _message.getContent();
String body = null;
if (content instanceof String) {
body = (String) content;
} else if (content instanceof Multipart) {
Multipart multipart = (Multipart) content;
BodyPart part = multipart.getBodyPart(0);
body = (String) part.getContent();
}
if (folder.isOpen()) {
folder.close(false);
}
我仍然只是想知道為什么問題只影響普通/文本電子郵件,並且在我嘗試獲取Multipart消息時沒有發生。
我按照以下方式編寫了代碼
public void setBody(Message msg) {
try {
if (msg.isMimeType("text/plain") || msg.isMimeType("text/html")) {
try {
// body += (String) msg.getContent() + " ";
if (msg.getContent() instanceof String) {
body += (String) msg.getContent() + " ";
}
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
else if (msg.getContent() instanceof Multipart) {
Multipart multipart = null;
try {
multipart = (Multipart) msg.getContent();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
boolean flag = false;
for (int i = 0; i < multipart.getCount(); i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
String disposition = bodyPart.getDisposition();
if (disposition != null && (disposition.equals(BodyPart.ATTACHMENT))) {
if (!flag) {
flag = true;
}
javax.activation.DataHandler handler = bodyPart.getDataHandler();
String filename = handler.getName();
body += filename + " ";
} else {
String bodyText = null;
try {
bodyText = GetMessageBodyText(bodyPart);
} catch (IOException e) {
e.printStackTrace();
}
body += bodyText + " ";
}
}
}
} catch (MessagingException e) {
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.