gpt4 book ai didi

JavaMail - 无法打开文件夹()

转载 作者:搜寻专家 更新时间:2023-11-01 08:14:58 26 4
gpt4 key购买 nike

正如标题所说,当尝试执行 folder.open() 时它失败了,但不会抛出错误,因此很难找到原因。在我的调试控制台中确实出现了以下错误,但它可能相关/可能不相关(这仅在 folder.open() 断点后按恢复后出现)。

我正在使用 JavaMail API for Android 进行开发。 IMAP 服务器一切正常,但我还需要能够连接到 POP3 邮件服务器。连接到的商店是 GMAIL,我的 GMAIL 帐户上的所有必要设置都已更改。

04-12 13:22:26.682: INFO/dalvikvm(436): Ljava/lang/IllegalStateException;: Folder is not Open
04-12 13:22:26.682: INFO/dalvikvm(436): at com.sun.mail.pop3.POP3Folder.checkOpen(POP3Folder.java:512)
04-12 13:22:26.682: INFO/dalvikvm(436): at com.sun.mail.pop3.POP3Folder.close(POP3Folder.java:227)
04-12 13:22:26.682: INFO/dalvikvm(436): at com.sun.mail.pop3.POP3Folder.finalize(POP3Folder.java:506)
04-12 13:22:26.682: INFO/dalvikvm(436): at dalvik.system.NativeStart.run(Native Method)

pop3的连接方法如下:

String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

Properties pop3Props = new Properties();

pop3Props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
pop3Props.setProperty("mail.pop3.socketFactory.fallback", "false");
pop3Props.setProperty("mail.pop3.port", "995");
pop3Props.setProperty("mail.pop3.socketFactory.port", "995");

URLName url = new URLName("pop3", "pop.gmail.com", 995, "",
"******@googlemail.com", "*****");

//session = Session.getInstance(pop3Props, null);
Session session = Session.getInstance(pop3Props, new javax.mail.Authenticator()
{
protected PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication("***********", "*****");
}
});

session.setDebug(true);

store = new POP3SSLStore(session, url);
store.connect();

连接商店的方法如下(遇到问题的地方):

folders = store.getFolder("INBOX");
//Folder folder = store.getFolder("INBOX");
if (folders.isOpen())
{
if ((folders.getMode() & Folder.READ_WRITE) != 0)
{
folders.close(false);
folders.open(Folder.READ_ONLY);
}
}
else
{
try
{
folders.open(Folder.READ_ONLY);
}
catch (Exception e)
{
Log.i("Folder Opening,", e.toString());
}
}

任何想法都会有所帮助! session 已调试,没有明显问题。如果需要任何更多信息来帮助您,请随时提出!我确定我不是唯一遇到此问题的人。

谢谢!里斯

最佳答案

所以,我们也遇到了这个问题。

我查看了触发该异常的 POP3Folder 的实现。

似乎 POP3Folder 正在覆盖 finalize() 以便在对象消失之前执行一些清理。 finalize() 覆盖调用 close() 检查文件夹是否打开,如果没有打开,您看到的 IllegalStateException 是抛出。

这就是您可能偶尔会看到它的原因;它发生在 GC 过来查看您的对象时,此时文件夹可能已经关闭,所以在 finalize() 调用时close(),检查文件夹是否打开会抛出异常。

现在,我不能说这是聪明还是愚蠢。如果 close() 忽略文件夹已经关闭的事实并继续移动,而不是抛出异常,那么代码似乎会更好。

POP3Folder 采用参数化构造函数。不幸的是,它不是公共(public)的或 protected ,因此您不能简单地从它派生并覆盖 close() 方法,从而删除对文件夹是否打开的检查。

但是,由于异常调用堆栈起源于 finalize(),它应该可以减少单独离开的危险,因为从 finalize() 抛出的任何异常通常只会停止该对象的终结过程(垃圾收集),而不会造成更多损害。

不过,我很乐意看到一个合适的解决方案。

关于JavaMail - 无法打开文件夹(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5636002/

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