javamail的IdleManager在Android中无效。
当我尝试使用idlemanager查看文件夹时,javamail抛出错误消息文件夹未使用SocketChannels 。 Android SocketChannel总是在Socket中返回null。
深入挖掘后,我发现当从SSLSocketFactory创建一个Socket时,它会使SocketChannel为空。
此问题是否有解决方法?
这是stacktrace
javax.mail.MessagingException: Folder is not using SocketChannels
at com.sun.mail.imap.IdleManager.watch(IdleManager.java:203)
at com.sample,mail.ImapIdle$1.doInBackground(ImapPushNotification.java:120)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
答案 0 :(得分:2)
尝试JavaMail 1.5.6(刚刚发布)。它有一些Android修复程序。
我已经深入研究了这一点,据我所知,这是Android中的一个错误,JavaMail无法轻松解决。 请向Google报告。以下适用于真正的Java,但在Android上打印为null:
Socket s = SocketChannel.open().socket();
s.connect(new InetSocketAddress(host, port));
Socket ss = ((SSLSocketFactory)SSLSocketFactory.getDefault()).
createSocket(s, host, port, true);
System.out.println("SocketChannel wrapped " + ss.getChannel());