gpt4 book ai didi

java - Javamail 中的 FolderClosed 异常

转载 作者:太空狗 更新时间:2023-10-29 13:27:56 31 4
gpt4 key购买 nike

我试图在 android 中创建一个简单的邮件客户端,并且我在我的应用程序中编译和运行了 javamail 的 android 版本。

但是,每当我尝试连接和接收邮件时,我都会收到如下所示的“文件夹已关闭”异常。

10-23 12:12:13.484: W/System.err(6660): javax.mail.FolderClosedException
10-23 12:12:13.484: W/System.err(6660): at com.sun.mail.imap.IMAPMessage.getProtocol(IMAPMessage.java:149)
10-23 12:12:13.484: W/System.err(6660): at com.sun.mail.imap.IMAPMessage.loadBODYSTRUCTURE(IMAPMessage.java:1262)
10-23 12:12:13.484: W/System.err(6660): at com.sun.mail.imap.IMAPMessage.getDataHandler(IMAPMessage.java:616)
10-23 12:12:13.484: W/System.err(6660): at javax.mail.internet.MimeMessage.getContent(MimeMessage.java:1398)
10-23 12:12:13.484: W/System.err(6660): at com.teamzeta.sfu.Util.MailHelper.getMessageHTML(MailHelper.java:60)
10-23 12:12:13.484: W/System.err(6660): at com.teamzeta.sfu.GetAsyncEmails.onPostExecute(EmailActivity.java:31)
10-23 12:12:13.484: W/System.err(6660): at com.teamzeta.sfu.GetAsyncEmails.onPostExecute(EmailActivity.java:1)
10-23 12:12:13.484: W/System.err(6660): at android.os.AsyncTask.finish(AsyncTask.java:631)
10-23 12:12:13.484: W/System.err(6660): at android.os.AsyncTask.access$600(AsyncTask.java:177)
10-23 12:12:13.484: W/System.err(6660): at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
10-23 12:12:13.484: W/System.err(6660): at android.os.Handler.dispatchMessage(Handler.java:99)
10-23 12:12:13.484: W/System.err(6660): at android.os.Looper.loop(Looper.java:137)
10-23 12:12:13.484: W/System.err(6660): at android.app.ActivityThread.main(ActivityThread.java:5227)
10-23 12:12:13.484: W/System.err(6660): at java.lang.reflect.Method.invokeNative(Native Method)
10-23 12:12:13.484: W/System.err(6660): at java.lang.reflect.Method.invoke(Method.java:511)
10-23 12:12:13.484: W/System.err(6660): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
10-23 12:12:13.484: W/System.err(6660): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
10-23 12:12:13.494: W/System.err(6660): at dalvik.system.NativeStart.main(Native Method)

我的代码如下:

public static Message[] getAllMail(String user, String pwd){
String host = "imap.sfu.ca";

final Message[] NO_MESSAGES = {};

Properties properties = System.getProperties();
properties.setProperty("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.imap.socketFactory.port", "993");

Session session = Session.getDefaultInstance(properties);

try {
Store store = session.getStore("imap");
store.connect(host, user, pwd);

Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_ONLY);

Message[] messages = folder.getMessages();

folder.close(true);
store.close();

Log.d("####TEAM ZETA DEBUG####", "Content: " + messages.length);

return messages;

} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Log.d("####TEAM ZETA DEBUG####", "Returning NO_MESSAGES");
return NO_MESSAGES;
}

public static String getMessageHTML(Message message){
Object msgContent;
try {
msgContent = message.getContent();
if (msgContent instanceof Multipart) {
Multipart mp = (Multipart) msgContent;
for (int i = 0; i < mp.getCount(); i++) {
BodyPart bp = mp.getBodyPart(i);
if (Pattern
.compile(Pattern.quote("text/html"),
Pattern.CASE_INSENSITIVE)
.matcher(bp.getContentType()).find()) {
// found html part
return (String) bp.getContent();
} else {
// some other bodypart...
}
}
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return "Something went wrong";
}

我在网上找不到任何有用的东西,有没有人知道为什么会这样?

这是调用

class GetAsyncEmails extends AsyncTask<String, Integer, Message[]>{

@Override
protected Message[] doInBackground(String... args) {
// TODO Auto-generated method stub
Message[] messages = MailHelper.getAllMail(args[0], args[1]);

return messages;
}

protected void onPostExecute(Message[] result){
if(result.length > 1){
Message message = result[0];
String content = MailHelper.getMessageHTML(message);
System.out.println("####TEAM ZETA DEBUG####" + content);
}
}

最佳答案

在对另一个用户给出的答案(由于某种原因不再存在)进行一些修改后,我发现我做错了什么。

当我从消息中获取内容时,商店需要仍然处于打开状态才能执行此操作。

在查找 FolderClosed 异常后,它使事情变得更清楚:“当在 Messaging 对象上调用方法并且拥有该对象的文件夹由于某种原因已死亡时,将引发此异常。”

由于我提前关闭了文件夹,并且我在调用方法时遇到了错误。

所以我想您需要在应用程序关闭时关闭商店。

关于java - Javamail 中的 FolderClosed 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19550624/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com