用于连接和执行IMAP文件夹操作的代码。
所以我的问题是关于javax.mail.Session
,在这种情况下每秒都会重新创建(取决于checkInbox()的休眠时间和运行时间。)
我确信这不是一个好的解决方案,尤其是对IMAP进行投票有点愚蠢,但我无法让IMAP listener
运行。
不是每次运行都重新创建会话可能是一个更好的解决方案,但我怎么知道session is closed
何时或者我可以故意关闭它?但是没有像Session.close()
或会话而不是NULL?或者会话上有一些已定义的超时...
来源:
final String port = "993";
Properties prop = new Properties();
// I assume there is some redundancy here but this didn't cause any problems so far
prop.setProperty("mail.imaps.starttls.enable", "true");
prop.setProperty("mail.imaps.port", port);
/** This part can be removed
* prop.setProperty("mail.imaps.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
* prop.setProperty("mail.imaps.socketFactory.port", port);
* prop.setProperty("mail.imaps.socketFactory.fallback", "false");
*/
prop.setProperty("mail.imap.ssl.enable", "true");
prop.setProperty("mail.debug", "false");
// Create a session before you loop since the configuration doesn't change
Session session = Session.getInstance(prop);
// Nearly loop forever in Prod
while(true){
// Check the INBOX and do some other stuff
Store store = session.getStore("imaps");
store.connect(host, user, pw);
// ... the operations on the session ...
store.close();
// Sleep a bit try & catch removed
Thread.sleep(1000);
}
答案 0 :(得分:13)
会话只管理配置信息;没有必要关闭它。只要您的配置没有更改,您可以在开头创建一次会话,然后继续使用它。
另一方面,连接价格昂贵,需要由应用程序仔细管理。连接用于存储和每个打开的文件夹。连接可以随时由服务器关闭或由于网络故障而关闭。如果没有主动使用连接,则应将其关闭。
您是否在JavaMail project page上找到了JavaMail规范和示例应用程序?他们将帮助解决许多简单问题,但连接管理是一个更高级的问题。
哦,你可以remove all that socket factory stuff使你的申请变得更简单。