Imap文件夹共享邮箱 - 收到无效状态的BAD命令

时间:2013-12-03 15:43:43

标签: java email imap

使用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

答:获取文件夹列表

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.

有什么问题?

2 个答案:

答案 0 :(得分:1)

我昨晚从我的imap连接到office365开始收到此消息。

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

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

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

这个时机很有意思。直到今天,一切都工作正常。微软必须在SSL实施方面做点什么。他们有机会使用openssl吗? : - )

答案 1 :(得分:1)

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

诀窍是获取 outlook.office365.com 管理面板中显示的alias,而是从管理面板 portal.office.com 。 还使用正斜杠。

格式为user/shared-mailbox-user-name

的最终登录名

示例:

域名 example.com
用户: user@example.com
密码: abcdefg
共享邮箱: info@example.com
shared-mailbox-user-name :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");