Java Mail:Session

时间:2013-07-25 08:19:58

标签: java email imap javamail

用于连接和执行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);
}

总而言之,我不得不说找到javax.mail的优秀示例和文档非常困难(除了APIFAQ

1 个答案:

答案 0 :(得分:13)

会话只管理配置信息;没有必要关闭它。只要您的配置没有更改,您可以在开头创建一次会话,然后继续使用它。

另一方面,连接价格昂贵,需要由应用程序仔细管理。连接用于存储和每个打开的文件夹。连接可以随时由服务器关闭或由于网络故障而关闭。如果没有主动使用连接,则应将其关闭。

您是否在JavaMail project page上找到了JavaMail规范和示例应用程序?他们将帮助解决许多简单问题,但连接管理是一个更高级的问题。

哦,你可以remove all that socket factory stuff使你的申请变得更简单。