0

首先,对不起我的英语(我来自西班牙)

我正在尝试从 Weblogic 8.1 服务器内的 Javamail 连接到带有 IMAP 和 SSL 的 Exchange 2010 邮件服务器。

这是我的代码

Properties prop = new Properties();

// IMAP
// Disable TLS
prop.setProperty("mail.imap.starttls.enable", "false");

// Use SSL
prop.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
prop.setProperty("mail.imap.socketFactory.fallback", "false");

// Use port 993
prop.setProperty("mail.imap.port", "993");
prop.setProperty("mail.imap.socketFactory.port", "993");

prop.setProperty("mail.imaps.class", "com.sun.mail.imap.IMAPSSLStore");

Session session = Session.getDefaultInstance(prop);
session.setDebug(true);
Store store = session.getStore("imap");
store.connect(host, user, password);

此时,我得到 javax.mail.AuthenticationFailedException: Command received in Invalid state。用户参数是“域\用户登录\邮箱别名”的组合。我使用它是因为我在操作指南中以这种方式看到了它。我已经在我的 Weblogic Server 中安装了有效的 SSL 证书。

我不知道错误在哪里。

通过调试,我得到了这个:

调试:getProvider() 返回 javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc]

OK Microsoft Exchange IMAP4 服务已准备就绪。

A0 能力

CAPABILITY IMAP4 IMAP4rev1 LOGINDISABLED STARTTLS 儿童空闲命名空间文字+

A0 OK 能力完成。

A1 登录“域\用户\邮箱别名”密码

A1 BAD 命令在无效状态下收到。

错误 2:javax.mail.AuthenticationFailedException:收到的命令处于无效状态。

4

3 回答 3

2

如果您使用的是端口 993,则需要imaps而不是imap作为您的协议:

Store store = session.getStore("imaps");

在端口 143 上,连接是明文的。然后,您可以选择通过发出STARTTLSIMAP 命令来启动 TLS 加密层。(这就是mail.imap.starttls.enable财产所控制的。)

在端口 993 上,初始连接必须是加密的 SSL 连接。此 SSL 握手必须在从服务器发送或接收任何文本之前完成。

于 2011-01-18T16:23:59.490 回答
0

确保将 Exchange 2010 设置为允许基于用户/密码的登录。

于 2011-01-18T16:21:14.000 回答
0

最后我解决了这个问题。这是javamail版本的问题,对于Exchange 2010来说太旧了。我升级到1.4版本并且可以工作。到目前为止,我使用的是 Javamail 1.1.3。

于 2011-02-10T13:00:43.547 回答