【问题标题】:Imap folder shared mailbox - BAD Command received in Invalid stateImap 文件夹共享邮箱 - 在无效状态下收到 BAD 命令
【发布时间】:2013-12-19 18:21:24
【问题描述】:

使用 JavaMail 我在更新共享邮箱的 imap 文件夹或仅列出共享邮箱的所有文件夹时遇到问题。
(更新主帐户的文件夹没问题)

邮件提供商是:office365

final Properties props = new Properties();
props.put("mail.imap.starttls.enable", true);
props.put("mail.imap.auth", true);
props.put("mail.imap.ssl.trust", "*");
props.put("mail.imap.ssl.enable", true);
props.put("mail.imap.auth.plain.disable", true);
props.put("mail.imap.auth.ntlm.disable", true);
props.put("mail.imap.auth.gssapi.disable", true);

final Session mailSession = javax.mail.Session.getInstance(props);
mailSession.setDebug(true);

final Store store = mailSession.getStore("imap");

store.connect("outlook.office365.com", 993, "user@domainname.de/Info", "******");
// A1 LOGIN user@domainname.de/Info ******
// A1 OK LOGIN completed.
// A2 CAPABILITY
// * CAPABILITY IMAP4 IMAP4rev1 AUTH=PLAIN UIDPLUS CHILDREN IDLE NAMESPACE LITERAL+
// A2 OK CAPABILITY completed.
// DEBUG IMAP: AUTH: PLAIN

A:获取文件夹列表

final Folder[] f = store.getDefaultFolder().list(); // list() throws exception
// A3 LIST "" "%"
// BAD Command received in Invalid state.

B:更新特定文件夹

final Folder folderSentItems = store.getFolder("Sent Items");
folderSentItems.open(Folder.READ_WRITE); // throws exception
// BAD Command received in Invalid state.
message.setFlag(Flag.SEEN, true);
folderSentItems.appendMessages(new Message[]
{
    message
});
store.close();

无论我检索所有文件夹 a) 还是更新任何文件夹 B,我都会收到此异常:

Caused by: com.sun.mail.iap.BadCommandException: BAD Command received in Invalid state.

有什么问题?

【问题讨论】:

  • 共享文件夹的名称是什么? % 通常不匹配这些东西(% 不匹配层次分隔符)。但我不明白为什么它很糟糕。它应该至少列出收件箱。
  • 我更新了这两种情况的答案。 % 来自 imap 和 javamail 协议,并且使用未共享的邮箱进行访问。
  • 您确定真正重要的是共享吗?可能是例如的存在吗? / 或文件夹名称中的空格?
  • 吉普,绝对。更新主用户邮箱的同一个文件夹是没有问题的。
  • 我有“同样”的问题,虽然使用 .NET 并使用 S22.Imap,连接到端口 993 上的 outlook.office365.com :(

标签: java email imap


【解决方案1】:

我昨晚开始从 imap 连接到 office365 收到这条消息。

阅读this 后,我可以通过将其添加到我的连接属性来修复它:

props.setProperty("mail.imap.ssl", "true")

(这是在scala中,当然在java中你需要一个分号......)

这个时机很有趣。直到今天,没有它一切都很好。微软肯定对他们的 SSL 实施做了一些事情。他们有机会使用openssl吗? :-)

【讨论】:

    【解决方案2】:

    经过数小时搜索和测试各种用户名组合后,以下内容对我有用:

    诀窍是采用 outlook.office365.com 管理面板中显示的 alias,而是采用用户名(可能是 UserPrincipalName UPN ) 从管理面板 portal.office.com。 也使用正斜杠。

    最终登录名的格式:user/shared-mailbox-user-name

    示例:

    域:example.com
    用户: user@example.com
    密码: abcdefg
    共享邮箱: info@example.com
    共享邮箱用户名/UPN: G1234567890123456789@example.com

    props.put("mail.imap.auth.plain.disable", true);
    props.put("mail.imap.auth.ntlm.disable", true);
    props.put("mail.imap.auth.gssapi.disable", true);
    
    store.connect("outlook.office365.com", 993, "user@example.com/G1234567890123456789@example.com", "abcdefg");
    

    更新

    Office365 管理员现在允许我们更新user-name UPN,以便我们可以使用共享邮箱本身。然后它看起来像这样

    store.connect("outlook.office365.com", 993, "user@example.com/info@example.com", "abcdefg");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-13
      • 2016-09-28
      • 2022-08-20
      相关资源
      最近更新 更多