我正在尝试使用JavaMail
(在Android应用中)获取新邮件通知。我正在使用IdleManager
来完成这项工作,它给出了一个例外:
文件夹未使用SocketChannels
答案 0 :(得分:1)
您是否阅读了IdleManager javadocs?
由于Java SE nio支持的限制,必须使用SocketChannel而不是Socket连接到服务器。但是,SocketChannels不支持套接字的所有功能,例如通过SOCKS代理服务器连接。 SocketChannels也不支持同时读写,这意味着如果使用SocketChannels则不能使用idle方法;请改用此IdleManager。要启用对SocketChannel而不是套接字的支持,请在用于访问IMAP文件夹的会话中设置
mail.imap.usesocketchannels
属性。 (或mail.imaps.usesocketchannels
如果您正在使用“imaps”协议。)这将影响该Session中的所有连接,但如果您需要使用与SocketChannels不兼容的功能,则可以创建另一个没有此属性集的Session 。
答案 1 :(得分:-1)
我在Android上遇到同样的问题,即使使用导致JavaMail使用mail.imaps.usesocketchannels
的{{1}},IdleManager也会通过调用SocketChannel.open()
来测试正确使用,这是硬编码返回null
Socket.getChannel()