You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JavaMail读取Azure关联邮件时遇IllegalStateException错误求助

解决JavaMail读取Office 365邮箱时的"文件夹未打开"错误

问题场景

使用JavaMail通过OAuth2连接与Microsoft Azure关联的Office 365邮箱,尝试读取收件箱邮件时触发异常。

原始代码

store.connect("outlook.office365.com", "email@bussness.com", token);

Folder folder = store.getFolder("INBOX");
Message[] messages = folder.getMessages();

for(Message msg : messages) {
    System.out.println(msg);
}

报错信息(中文翻译)

Exception in thread "main" java.lang.IllegalStateException: 不允许对已关闭的文件夹执行此操作
    at com.sun.mail.imap.IMAPFolder.checkOpened(IMAPFolder.java:478)
    at com.sun.mail.imap.IMAPFolder.getMessages(IMAPFolder.java:1856)
    at com.communication.quickstart.ExecuteTwo.main(ExecuteTwo.java:57)

解决方案

核心问题:获取Folder实例后未调用open()方法打开文件夹,直接调用getMessages()会触发该异常。

修改后的代码:

store.connect("outlook.office365.com", "email@bussness.com", token);

Folder folder = store.getFolder("INBOX");
// 以只读模式打开文件夹,按需可选Folder.READ_WRITE
folder.open(Folder.READ_ONLY);
Message[] messages = folder.getMessages();

for(Message msg : messages) {
    System.out.println(msg);
}

// 操作完成后关闭资源,避免泄漏
folder.close(false);
store.close();

关键注意事项

  • 调用Folder.open()时必须指定访问模式:Folder.READ_ONLY(仅读取)或Folder.READ_WRITE(可读写),根据业务需求选择。
  • 邮件操作完成后,务必关闭文件夹和存储连接,释放相关资源。

内容的提问来源于stack exchange,提问作者Diego Fernando Rodrguez Gonzle

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 04:50:41